2013-02-26 34 views
-1

我試過下面的代碼,但它似乎JavaScript運行在HTTP請求被髮送到服務器之前。我該如何防止JavaScript在這種情況下使用PHP(http://my_host_here.com/publications.php/「><script> alert(1)</script>)?

感謝

<?php 

class secure 
{ 
    function secureSuperGlobalGET(&$value, $key) 
    { 
     $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key])); 
     $_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]); 
     $_GET[$key] = mysql_escape_string($_GET[$key]); 
     return $_GET[$key]; 
    } 

    function secureSuperGlobalPOST(&$value, $key) 
    { 
     $_POST[$key] = htmlspecialchars(stripslashes($_POST[$key])); 
     $_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]); 
     $_POST[$key] = mysql_escape_string($_POST[$key]); 
     return $_POST[$key]; 
    } 

    function secureGlobals() 
    { 
     echo "in here"; 
     array_walk($_GET, array($this, 'secureSuperGlobalGET')); 
     array_walk($_POST, array($this, 'secureSuperGlobalPOST')); 
    } 
} 

?> 
+2

不知道你想在這裏做什麼。你只是把那些可憐的字符串弄得無法識別:)總是爲了手頭的任務而逃跑*只*。你能否在什麼情況下澄清你想要阻止的事情? – 2013-02-26 00:41:16

+1

請參閱[最終清潔/安全功能](http://stackoverflow.com/q/4223980) – 2013-02-26 00:42:06

+0

您以後如何使用這些值?您是將它們存儲在數據庫中還是將它們打印到用戶? – 2013-02-26 00:42:48

回答

0
  1. 擺脫你的類的「安全」
  2. 使用mysql_[real_]escape_string的值正在引用SQL查詢作爲引用字符串
  3. 任何其他SQL部分必須根據其角色進行格式化。
  4. 在組裝查詢之前格式化SQL部件,而不是其他任何地方。呼應出來當用戶提交的數據使用的htmlspecialchars():
  5. 或更好地利用佔位符這個

最後,要回答你的問題。

0

如果Javascript在代碼返回到服務器之前運行,那麼這很可能是某種形式的DOM Based XSS。 Javascript可能會拉動/"><script>alert(1)</script>的值並將其直接放置到DOM中。你可能不得不改變這種方式在客戶端處理。

OWASP提供瞭如何抵禦基於DOM的跨站點腳本攻擊,如這些,在這裏一個夢幻般的概述:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

相關問題