这是关于数据清理的回归基础问题。 我有一个表单字段,用户没有合理的理由输入<或者>,可用于注入html和javascript。
我没有深入了解各种各样的功能,我很乐意在他们自己的地方使用它,我想知道这种准分两步法是否能保证脚本的安全。
提前感谢任何见解!
答案 0 :(得分:3)
如果它是<textarea>
,您可能可以安全地进行XSS注入,但如果字符串包含任何&符号(&
),您可能仍然会遇到意外影响。< / p>
如果它是<input>
字段,则引号也需要转义。考虑如果值是" onmouseover="alert('foo');
会发生什么(假设你使用双引号属性;如果你使用单引号,则交换两种类型的引号)。
无论如何,安全的做法是始终转义在需要转义的上下文(HTML,SQL等)中使用的任何字符串:
每当您在HTML代码中包含非HTML字符串时,请使用htmlspecialchars()
。
每当在SQL查询中包含非SQL字符串时,请使用数据库库的引用方法(例如PDO::quote()
,mysqli_escape_string()
等)。或者,更好的是use placeholders,这样您就不必首先在SQL中嵌入用户输入。
即使您确定该字符串不包含任何需要要转义的字符,转义它仍然是正确的做法。如果关于字符串可能包含或不包含的内容的假设发生变化,它还可以确保您不会被咬。