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 資料,基本上是很困難的。