2009-11-27 47 views
1

我收到Mcafee Secure的漏洞警報,聲稱我的網站存在XSS漏洞。他們用它來生產它的字符串是:從URL字符串去除腳本標記的最佳方式是什麼?

https://www.mywebsite.com/%3E%22%3E%3Cscript%3Ealert%28123%29%3C/script%3E%3C%22/www.mywebsite.com/my-product.html?ref=443%2Fanother_page_on_my_site.php

我不能提交URL時顯示警告,但邁克菲發誓它是一個真正的漏洞。

解決該問題的最佳方法是什麼?我正在考慮使用Apache mod_rewrite來重寫所有包含腳本標記的URL。這就是說,我無法弄清楚如何編寫表達式來識別標籤。

回答

1

事實證明,我有以下代碼是回顯網頁內的網址。

<? 
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']); ?>" /> 
<? 
} 
?> 
-1

您提出的解決方案 - 防止腳本標記 - 是解決跨站點腳本問題的顯而易見的解決方案,niave和不正確的解決方案。請閱讀CGI安全公司的XSS FAQ(http://www.cgisecurity.com/articles/xss-faq.shtml)。他們在解釋XS如何工作以及如何防止XS的工作方面做得非常出色 - 而且在您正確解決問題之前,您確實需要了解它。

0

而不是綁定來過濾攻擊企圖,只要確保你總是妥善逃避HTML中的用戶輸入。查詢參數是用戶輸入。

您確實需要了解輸入是如何傳播的,並且在顯示之前立即轉義。

有一點要記住的是,逃逸取決於它的顯示在上下文是不同的一些技巧我覺得有用:

  • 顯示HTML元素中:使用HTML轉義
  • 出現在一個HTML元素屬性:使用HTML屬性逃逸(可以使用HTML轉義爲好,但屬性只逃跑速度更快)
  • 出現在JavaScript文字:編碼用JSON正確逃生
+0

我很熟悉轉義所有文章並獲取變量,但我想我只是不明白這個漏洞的工作原理。它只是網址的一部分,所以我不知道如何過濾掉它。看起來像創建URL時使用urlencode(),但這不會阻止某人創建自己的URL。那麼我會過濾哪些文件? 感謝您的幫助! – user77413 2009-11-27 23:12:28

+0

我所說的是不要過濾掉任何東西,而是在頁面上顯示時正確編碼它。 – orip 2009-11-28 07:06:48

0
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 _.- & = 當然你可以根據你的需要來增強這個功能。

相關問題