我收到Mcafee Secure的漏洞警報,聲稱我的網站存在XSS漏洞。他們用它來生產它的字符串是:從URL字符串去除腳本標記的最佳方式是什麼?
我不能提交URL時顯示警告,但邁克菲發誓它是一個真正的漏洞。
解決該問題的最佳方法是什麼?我正在考慮使用Apache mod_rewrite來重寫所有包含腳本標記的URL。這就是說,我無法弄清楚如何編寫表達式來識別標籤。
我收到Mcafee Secure的漏洞警報,聲稱我的網站存在XSS漏洞。他們用它來生產它的字符串是:從URL字符串去除腳本標記的最佳方式是什麼?
我不能提交URL時顯示警告,但邁克菲發誓它是一個真正的漏洞。
解決該問題的最佳方法是什麼?我正在考慮使用Apache mod_rewrite來重寫所有包含腳本標記的URL。這就是說,我無法弄清楚如何編寫表達式來識別標籤。
事實證明,我有以下代碼是回顯網頁內的網址。
<?
if($_SERVER['HTTPS']){
?>
<link rel="canonical" href="<? echo HTTP_SERVER.$_SERVER['REQUEST_URI']; ?>" />
<?
}
?>
我忘了在request_uri周圍放置htmlentities()。以下固定它:
<?
if($_SERVER['HTTPS']){
?>
<link rel="canonical" href="<? echo htmlentities(HTTP_SERVER.$_SERVER['REQUEST_URI']); ?>" />
<?
}
?>
您提出的解決方案 - 防止腳本標記 - 是解決跨站點腳本問題的顯而易見的解決方案,niave和不正確的解決方案。請閱讀CGI安全公司的XSS FAQ(http://www.cgisecurity.com/articles/xss-faq.shtml)。他們在解釋XS如何工作以及如何防止XS的工作方面做得非常出色 - 而且在您正確解決問題之前,您確實需要了解它。
您可以使用UrlEncode和UrlDecode方法來實現。你可以谷歌更多關於這些項目。這裏是一個鏈接,它會幫助你http://php.net/manual/en/function.urlencode.php
而不是綁定來過濾攻擊企圖,只要確保你總是妥善逃避HTML中的用戶輸入。查詢參數是用戶輸入。
您確實需要了解輸入是如何傳播的,並且在顯示之前立即轉義。
有一點要記住的是,逃逸取決於它的顯示在上下文是不同的一些技巧我覺得有用:
function filter_url($url)
{
if (is_array($url))
{
foreach ($url as $key => $value)
{
// recurssion
$url[$key] = filter_url($value);
}
return $url;
}
else
{
// remove everything except for a-ZA-Z0-9_.-&=
$url = preg_replace('/[^a-ZA-Z0-9_\.\-&=]/', '', $url);
return $url;
}
}
現在,您可以過濾_GET的$這樣的:
$_GET = filter_url($_GET);
這將消滅一切,除了支持A-ZA-Z0-9 _.- & = 當然你可以根據你的需要來增強這個功能。
我很熟悉轉義所有文章並獲取變量,但我想我只是不明白這個漏洞的工作原理。它只是網址的一部分,所以我不知道如何過濾掉它。看起來像創建URL時使用urlencode(),但這不會阻止某人創建自己的URL。那麼我會過濾哪些文件? 感謝您的幫助! – user77413 2009-11-27 23:12:28
我所說的是不要過濾掉任何東西,而是在頁面上顯示時正確編碼它。 – orip 2009-11-28 07:06:48