这是一个关于数据清理的回归基础问题。我有一个表单字段,用户没有正当理由输入 < 或 >,可用于注入 html 和 javascript。
没有进入 htmlentities 和各种剥离函数,我很高兴在他们自己的地方使用它们,我想知道这种准系统的两步方法是否能保证脚本的安全性。
- 检查该字段是否包含“<”或“>”以避免与浏览器相关的注入。
- 在将字段发送到数据库之前使用 PDO quote() 函数以避免 SQL 注入。
提前感谢您的任何见解!
这是一个关于数据清理的回归基础问题。我有一个表单字段,用户没有正当理由输入 < 或 >,可用于注入 html 和 javascript。
没有进入 htmlentities 和各种剥离函数,我很高兴在他们自己的地方使用它们,我想知道这种准系统的两步方法是否能保证脚本的安全性。
提前感谢您的任何见解!
如果它是 a <textarea>
,那么您可能不会受到 XSS 注入的影响,尽管如果字符串包含任何 & 符号 ( &
),您仍然可能会得到意想不到的效果。
如果它是一个<input>
字段,引号也需要转义。考虑一下如果该值是" onmouseover="alert('foo');
(假设您使用的是双引号属性;如果您使用的是单引号,则交换两种类型的引号)会发生什么。
无论如何,安全的做法是始终对需要转义的上下文(HTML、SQL 等)中使用的任何字符串进行转义:
每当您在 HTML 代码中包含非 HTML 字符串时,请使用htmlspecialchars()
.
每当您在 SQL 查询中包含非 SQL 字符串时,请使用您的数据库库的引用方法(例如PDO::quote()
、mysqli_escape_string()
等)。或者,更好的是,使用占位符,这样您就不必首先在 SQL 中嵌入用户输入。
即使您确定字符串不会包含任何需要转义的字符,转义它仍然是正确的做法。如果关于字符串可能包含或可能不包含的内容的假设发生变化,它还可以确保您不会被咬。