2013-02-26 57 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

相关问题