用户输入的安全漏洞域,而不是SQL语句


Security vulnerability domains from user input, other than SQL statements?

出于安全原因,除了最终出现在SQL语句中的数据之外,还需要对哪些类型的用户提交的数据进行清理?

例如,我知道("知道")

if ( isset($_POST['someVar']) && ("a_value" == $_POST['someVar']) ) {
   print "A";
} else {
   print "B";
}

不会给我带来麻烦;我很确定

print "<table><tr><td>" . $_POST['someVar'] . '</td></tr></table>';

也不会。

我需要在哪些域中净化用户输入(SQL语句除外),为什么?

保护用户所在位置:

  • 输入HTML(用户可能会注入恶意JavaScript,或者意外地使标记未关闭-通常最好使用Markdown或类似的方法)
  • 输入XML(用户可以使用实体黑客从服务器获取您的私人文件)
  • 输入可执行代码,如PHP(用户可以在服务器上运行任意代码)
  • 上传文件(由服务器上的特定应用程序处理的文件可能允许缓冲区溢出黑客攻击)

您可以针对任何目标环境进行保护。如果您正在构建DB查询,则使用SQL注入保护。如果用户数据进入电子邮件,则使用html&mime注入保护。html目标,html注入保护。

除了"使用任何目标环境的保护系统"之外,没有一个"正确"的答案。

您应该停止使用古老的mysql_*函数,并学习如何将准备好的语句与PDO或MySQLi一起使用。默认情况下,这将为您提供针对SQL注入的保护。

用于访问MYSQL的mysql_* API函数已超过10年。开发人员不再支持他们,一个贬低他们的过程已经开始。

你可能容易受到哪些其他形式的攻击是不可能的,因为没有代码可以查看。有很多攻击载体,这取决于你的网站实际使用的内容。