使用IsValid()验证电子邮件地址或URL格式是否可以防止XSS?指定其他格式时,它会否定XSS吗?
最佳答案
有效的URL仍可以包含攻击媒介:
<!--- No on CF9 --->
<cfoutput>#isValid("url", "http://www.mydomain.com/products/products.asp?productid=123; DROP TABLE Products")#</cfoutput>
<!--- Yes on CF9: hex encoded ';DROP TABLE Products' --->
<cfoutput>#isValid("url", "http://www.mydomain.com/products/products.asp?productid=123%3B%20%44%52%4F%50%20%54%41%42%4C%45%20%50%72%6F%64%75%63%74%73")#</cfoutput>
授予以上内容不是XSS攻击,但可以更改为使用攻击来更新列。
电子邮件验证似乎可以防止the attacks I could find。
一般而言,
isValid()
有助于在数据类型为有限值(整数,SSN,UUID等)时防止XSS攻击。但是,there's a laundry list of documented potential attacks针对本身唯一数据类型为“字符串”的字段。在这种情况下,isValid()
毫无帮助,而OWASP's AntiSamy是用于此目的的有用工具,它可以遍历DOM并删除未列入白名单的任何内容。Best regex to catch XSS (Cross-site Scripting) attack (in Java)?提供了有关XSS预防一般主题的许多有用信息。
最后要弄清楚这一点,请使用:
<cfqueryparam cfsqltype="..." value="...">
to protect queries。
更新
最后但并非最不重要的,OWASP XSS Cheat Sheet:最好的启发式方法集,用于处理输入以防止XSS。
关于validation - IsValid()是否可以防御XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550668/