2011
Dec
17

XSS 全名是 Cross Site Scripting ,也就是跨网站脚本攻击,就是在第三方的网站中植入有转址的语法,将被害人导至有毒的网页,或是将有害的程式,殖入第三方的网页中,再让受害人不知不觉的进入该网页,盗取其个人资料,如照片、隐私、信用卡等等,下图是一个简单的 XSS 攻击范例。

, XSS Attack

很多网页都会有使用者上传资料,最常见的就是部落格,如果网站管理员没有对上传的文章做检查,就会出现XSS 跨网域功击的漏洞。

例如:文章内容包含下列语法:这个语法,会直接将网页导向有病毒的网址,凡是连到这个网页的使用者,都有中毒的风险。

hack.html
  1. <script>
  2. window.location.href="有病毒网址";
  3. </script>
  4. <a href="javascript:alert(1)" onclick="alert(1)">XSS</a>
  5. <img src="" onerror="alert(1);">
  • PHP 处理方式1: 禁示使用 html 语法
solution1.php
  1. $c=explode("\r\n",$c); // 断行
  2. $n=sizeof($c);
  3. $newc='';
  4. for($i=0; $i<$n;$i++){
  5. if($i!=0){$newc.='<br />';}
  6. $newc.=strip_tags($c);
  7. }
  • PHP 处理方式2: 转换 html 语法
solution2.php (& 请自行换成 &)
  1. $c=explode("\r\n",$c);
  2. $newc='';
  3. $n=sizeof($s);
  4. $re=array('<'=>'&#60;', '>'=>'&#62;', '%'=>'&#37;', '''=>'&#39;','"'=>'&#34;');
  5. for($i=0; $i<$n;$i++){
  6. if($i!=0){$newc.='<br />';}
  7. $newc.=strtr($c[$i],$re);
  8. }
  9. }
  • PHP 内建的 function : htmlentities($html);

这个 function 可以将 & < > " 等等转成 &amp; &lt; &gt; &quot;

防止cookie被 Javascript 盗取

如果网站受到 XSS 攻击,用户的 Cookie 资料就会被 Javascript 的语法读取,再回传到骇客手中的机器,所以 Cookie 资料也是需要被防护的。

setcookie,这个 function 的最后一个参数是指定 HttpOnly ,代表cookie不能够被 Javascript 存取,不过这个功能必需要浏览器支援才有效,目前大部分的浏览器皆有支援,如 IE6 sp1, IE 7~ , Firefox 2.2~, Chrome, safari 4~, opera 等等。
Example
  1. setCookie("name","value",time()+86400,"/","domain",false,true);

Google, Yahoo 等大公司,都已经在使用 HttpOnly 的设定,想要用 XSS 偷他们的网站的 Cookie 资料,基本上是很困难的。


目前回應 Comments(2 comments)

回應 (Leave a comment)