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)