今天是万圣夜(Halloween),正好也是社团文化节晚会。

大家肯定都知道,其实我们是不太关心节目的,而且协会缺少妹子,演不出什么好节目,所以我们临时决定,在晚会上搞了一个“不给糖就捣蛋:jack_o_lantern:”(Trick-or-theat)的活动。

今天不是万圣节

稍微纠正一下,10月31日并不是万圣节(All Saints’ Day),而是万圣夜(Halloween)。就像12月24日不是圣诞节(Christmas Day)而是圣诞夜(Christmas Eve)……其实都是淘宝搞促销的借口而已

晚会现场

这就是晚会现场,虽然我们没有人上台演出。

Trick-or-treat!

我们协会并没有上台演出(因为需要提前排练),而是在舞台两边的微信墙演出——就是拿微信关注“社团石大”公众号,然后在活动期间给公众号发文字,你的文字就能显示到微信墙上,从而参与互动。就是下图——

微信墙

那个大法风格文字不是我们的节目。

节目开始——我们的演员,向微信墙,发了一条信息:

萌萌哒<script>while(1);</script>

节目很短,一下子就演完了:ghost:

由于我们的准备不太充分,所以节目真的不精彩。下回我们会好好准备……

严肃点

这也叫节目?

难道你没仔细看一下演员到底发了什么吗?我们的演员反映说,大屏幕黑了3分钟,投影仪(其实应该是操作投影仪的人)一直在重启,最后重新打开网页才上去……

发生了什么

微信墙

我们的节目虽然很短,但是有一个响亮的名字——XSS(跨站脚本攻击)

首先谈谈微信墙。

微信实在是火得不得了,各种营销互动拉票集赞骗人活动都用微信,简直是腾讯的新帝国!因为微信提供了众多开发者接口(虽然不一定都给屌丝开放),但是在大家都不愿意安装新 APP 的情况下,使用微信作为一个轻 APP 实在是太划算了。

微信墙的原理就很简单了——一个经过设计狮精心制作的网页,后台 PHP+MySQL,隔几秒钟就把服务器里的留言显示出来(用 AJAX 技术避免浏览器的“刷新”)。至于微信墙做得怎么样,基本上取决于设计狮的水平。后端PHP+前端AJAX都普及到泛滥了,所以随便找个人都能把后台写出来。服务器的数据哪儿来呢?因为微信有接口,所以按照疼讯的接口文档编程就行了。

因为微信太火了,所以事实上根本都用不着编程——百度上一搜一大把。稍微懂点技术就行,如果拿 Windows 当服务器,甚至都不用敲命令:smirk:

XSS

接着谈谈我们的“节目”。

XSS 有很多种形式。精心构造的 XSS 可以达到破坏或窃取数据的目的。当然,作为一个晚会的“节目”,我们就只写了一个最简单的 while(1)。(其实演员还不知道这个东西是啥呢!)

因为微信墙后台太简单了,而且没有哪个正常人会像孙悟空那样大闹天宫晚会(特意安排的不算),所以编程的人肯定没想到有人会在万圣节前夜捣蛋——

微信是疼讯搞的,我们认为它没有漏洞(至少跟微信墙相比)。它会把我们发的内容原封不动地交给微信墙服务器。作为一个网站,微信墙可能会用以下方式显示观众留言:

<?php
    // 从服务器(数据库)获取留言
    ...
    $row = mysql_query($sql);
    $user = $row[0]
    $message = $row[1];
    ...
?>
...
<!-- 显示用户留言(头像昵称什么的,略) -->
<li><?php echo $message; ?></li>

他们很可能直接用 echo 语句把观众留言输出。

PHP 的 echo 并不进行任何过滤,所以你发萌萌哒的时候会显示萌萌哒三个字;发萌萌哒<script>while(1);</script>的时候也会把这堆乱七八糟的东西同时输出,只不过,后面script包围的东西是一个合法的 HTML 标签,所以浏览器会执行这段代码。于是……浏览器卡死了。

XSS 就是这样。一个攻击者试图找到网站的漏洞,通过发送精心构造的数据,使浏览器可以执行一段代码。结果就是,其他人在浏览这些页面的时候,浏览器执行了这段代码,……实施破坏,或者窃取隐私,或者植入病毒

XSS 的防范也是个技术活。原则很简单,不要信任任何来自用户的数据,因此在输出之前对特殊字符进行过滤是最有效的方法。

高级主题

如果出于功能需要,不能过滤所有 HTML 标签,可以看一下百度Web前端开发部的相关文章。他们试图站在前端的角度,在不过滤 HTML 标签的情况下阻止恶意元素的产生。

另一个 Trick-or-theat

既然一个简单的脚本就把微信墙搞垮了,那么他们微信墙后台的密码肯定是' or 'a'='a。不信可以试试。

这是我们要演的另一个节目,节目的名字是 SQL 注入,只不过今天太匆忙没做彩排。等以后再有晚会的时候,我们可能就会派人演出,到时候欢迎大家捧场:smirk:

结论

现在处处都在强调“安全生产”,甚至有一个工地里面都写着亲爱的工友们:在外打工,注意安全,一旦发生事故:别人睡你媳妇,打你孩子,花你的抚恤金!打工安全,为你自己。

所以,作为给人打工的IT农民工——码农,开发应用的时候怎能不注意安全呢?虽然很多码农没有媳妇孩子和抚恤金

  • 分享本文: