文本输入卫生和安全

时间:2012-03-26 22:11:50

标签: php security xss

我正在努力确保所有输入都是安全的,保护服务器和XSS攻击。用strip_tagshtmlentities验证输入是否为傻瓜证明系统?我被告知它是,并想确认。即例如:

$re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8");

这应该可以防止任何linux命令和任何html链接正确吗?是否有任何漏洞未被考虑过?

3 个答案:

答案 0 :(得分:5)

这完全不是htmlentities的用途。在将输出发送到浏览器之前,使用htmlentites对输出进行编码。它与消毒输入无关。处理输入时唯一需要担心的是正确地将数据转储到SQL查询中以防止SQL注入。有关详情,请参阅PHP Data Objects

strip_tags在这里非常有用,但您不需要同时使用strip_tags htmlentitieshtmlentites的全部目的是阻止标记被解释。考虑这个问题的唯一正确方法是:保留用户输入的内容并使其安全。不要剥离他们的标签,只需编码它们,以便它们在键入时显示。否则,您最终会删除<sarcasm><rant>标记之类的内容。用户的意图不是注入HTML。

“Linux命令”与HTML无关。无法通过HTML /脚本注入执行任意Linux命令。

  

我想到的是诸如“; ls -la”

之类的东西

如果你实际上正在接受用户提供的输入并通过system或者那种方式执行它,那么你已经遇到了麻烦。这是一个可怕的想法,你不应该这样做。

&LT; /咆哮&GT;

答案 1 :(得分:4)

您必须始终为作业选择合适的工具。据说$re = htmlentities(strip_tags($_GET['re']), ENT_COMPAT, "UTF-8");永远不应该用于任何事情。该命令是多余的,这意味着你不明白它在做什么。它不能很好地防止xss因为xss is an output problem

要清理shell参数,您必须使用escpaeshellarg()。对于XSS,您应该使用: htmlspecialchars($_GET['re'], ENT_QUOTES, "UTF-8");。但是,这并不会阻止所有XSS,也不会阻止SQL注入。

对sql使用参数化查询。

所有这些只是划伤表面阅读OWASP top 10

答案 2 :(得分:-1)

这是我在将其插入数据库之前过滤输入的方式

 <?php
      function sanitize($data){
          $result = trim($data);
          $result = htmlspecialchars($data);
          $result = mysql_real_escape_string($data);
          return $result;
      }
 ?>