1

这是一个关于数据清理的回归基础问题。我有一个表单字段,用户没有正当理由输入 < 或 >,可用于注入 html 和 javascript。

没有进入 htmlentities 和各种剥离函数,我很高兴在他们自己的地方使用它们,我想知道这种准系统的两步方法是否能保证脚本的安全性。

  1. 检查该字段是否包含“<”或“>”以避免与浏览器相关的注入。
  2. 在将字段发送到数据库之前使用 PDO quote() 函数以避免 SQL 注入。

提前感谢您的任何见解!

4

1 回答 1

3

如果它是 a <textarea>,那么您可能不会受到 XSS 注入的影响,尽管如果字符串包含任何 & 符号 ( &),您仍然可能会得到意想不到的效果。

如果它是一个<input>字段,引号也需要转义。考虑一下如果该值是" onmouseover="alert('foo');(假设您使用的是双引号属性;如果您使用的是单引号,则交换两种类型的引号)会发生什么。

无论如何,安全的做法是始终对需要转义的上下文(HTML、SQL 等)中使用的任何字符串进行转义:

  • 每当您在 HTML 代码中包含非 HTML 字符串时,请使用htmlspecialchars().

  • 每当您在 SQL 查询中包含非 SQL 字符串时,请使用您的数据库库的引用方法(例如PDO::quote()mysqli_escape_string()等)。或者,更好的是,使用占位符,这样您就不必首先在 SQL 中嵌入用户输入。

即使您确定字符串不会包含任何需要转义的字符,转义它仍然是正确的做法。如果关于字符串可能包含或可能不包含的内容的假设发生变化,它还可以确保您不会被咬。

于 2013-07-04T06:44:27.983 回答