XSS 全名是 Cross Site Scripting ,也就是跨网站脚本攻击,就是在第三方的网站中植入有转址的语法,将被害人导至有毒的网页,或是将有害的程式,殖入第三方的网页中,再让受害人不知不觉的进入该网页,盗取其个人资料,如照片、隐私、信用卡等等,下图是一个简单的 XSS 攻击范例。
很多网页都会有使用者上传资料,最常见的就是部落格,如果网站管理员没有对上传的文章做检查,就会出现XSS 跨网域功击的漏洞。
例如:文章内容包含下列语法:这个语法,会直接将网页导向有病毒的网址,凡是连到这个网页的使用者,都有中毒的风险。
hack.html
- <script>
- window.location.href="有病毒网址";
- </script>
- <a href="javascript:alert(1)" onclick="alert(1)">XSS</a>
- <img src="" onerror="alert(1);">
- PHP 处理方式1: 禁示使用 html 语法
solution1.php
- $c=explode("\r\n",$c); // 断行
- $n=sizeof($c);
- $newc='';
- for($i=0; $i<$n;$i++){
- if($i!=0){$newc.='<br />';}
- $newc.=strip_tags($c);
- }
- PHP 处理方式2: 转换 html 语法
solution2.php (& 请自行换成 &)
- $c=explode("\r\n",$c);
- $newc='';
- $n=sizeof($s);
- $re=array('<'=>'&#60;', '>'=>'&#62;', '%'=>'&#37;', '''=>'&#39;','"'=>'&#34;');
- for($i=0; $i<$n;$i++){
- if($i!=0){$newc.='<br />';}
- $newc.=strtr($c[$i],$re);
- }
- }
- 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
- setCookie("name","value",time()+86400,"/","domain",false,true);
Google, Yahoo 等大公司,都已经在使用 HttpOnly 的设定,想要用 XSS 偷他们的网站的 Cookie 资料,基本上是很困难的。