check_plain()是否足够?


Answers:


26

我认为问题在于使用check_plain(filter_xss($string))filter_xss(check_plain($string))

check_plain()filter_xss()有两个不同的目的:

  • check_plain() 在纯文本字符串中编码特殊字符,然后将其显示为HTML。
  • filter_xss()过滤HTML字符串以防止跨站点脚本(XSS)漏洞。具体而言,其目的是:

    • 删除可能欺骗浏览器的字符和构造
    • 确保所有HTML实体格式正确
    • 确保所有HTML标记和属性格式正确
    • 确保没有HTML标签包含带有不允许的协议的网址(例如javascript :)

如果使用check_plain(),则传递给该函数的字符串应用作纯文本;在这种情况下,filter_xss()则没有必要。如果使用filter_xss(),则传递给该函数的字符串应该是HTML,并且check_plain()不是必需的。

如果问题是关于在同一字符串的不同部分上使用check_plain()filter_xss(),那么,正如greggles在其注释中指出的那样,您可以(例如)check_plain()在标签属性的内容以及filter_xss()整个HTML标签上使用。


5
filter_xss用于整个html。如果您在html属性上使用filter_xss,它将无法正确过滤它。check_plain可用于安全地过滤html属性。有关使用这些功能的更多信息,另请参见drupalscout.com/knowledge-base/…drupalscout.com/knowledge-base/…
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.