PHP 跨站點腳本攻擊 |
發(fā)布時間: 2012/7/28 19:01:04 |
在跨站點腳本(XSS)攻擊中,往往有一個惡意用戶在表單中(或通過其他用戶輸入方式)輸入信息,這些輸入將惡意的客戶端標記插入過 程或數(shù)據(jù)庫中。例如,假設站點上有一個簡單的來客登記簿程序,讓訪問者能夠留下姓名、電子郵件地址和簡短的消息。惡意用戶可以利用這個機會插入簡短消息之 外的東西,比如對于其他用戶不合適的圖片或將用戶重定向到另一個站點的 JavaScript,或者竊取 cookie 信息。
幸運的是,PHP 提供了 strip_tags() 函數(shù),這個函數(shù)可以清除任何包圍在 HTML 標記中的內容。strip_tags() 函數(shù)還允許提供允許標記的列表,比如 <b> 或 <i>。
清單 16 給出一個示例,這個示例是在前一個示例的基礎上構建的。
清單 16. 從用戶輸入中清除 HTML 標記
<?php
if ($_POST['submit'] == "go"){
//清除標簽
$name = strip_tags($_POST['name']);
$name = substr($name,0,40);
//清除16進制字符
$name = cleanHex($name);
//continue processing....
}
function cleanHex($input){
$clean = preg_replace\
("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);
return $clean;
}
?>
<form action=\
"<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<p><label for="name">Name</label>
<input type=\
"text" name="name" id="name" size="20" maxlength="40"/></p>
<p><input type="submit" name="submit" value="go"/></p>
</form>
從安全的角度來看,對公共用戶輸入使用 strip_tags() 是必要的。如果表單在受保護區(qū)域(比如內容管理系統(tǒng))中,而且您相信用戶會正確地執(zhí)行他們的任務(比如為 Web 站點創(chuàng)建 HTML 內容),那么使用 strip_tags() 可能是不必要的,會影響工作效率。
還有一個問題:如果要接受用戶輸入,比如對貼子的評論或來客登記項,并需要將這個輸入向其他用戶顯示,那么一定要將響應放在 PHP 的 htmlspecialchars() 函數(shù)中。這個函數(shù)將與符號、< 和 > 符號轉換為 HTML 實體。例如,與符號(&)變成 &。這樣的話,即使惡意內容躲開了前端 strip_tags() 的處理,也會在后端被 htmlspecialchars() 處理掉。
億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
聯(lián)系:億恩小凡 QQ:89317007 電話:0371-63322206 本文出自:億恩科技【www.riomediacenter.com】 本文出自:億恩科技【www.enidc.com】 --> |