深度防御策略涉及几种良好的编程实践

深度防御策略涉及几种良好的编程实践:

  • 永远不要以超级用户或数据库所有者的身份连接到数据库。始终使用具有最低权限的自定义用户。
  • 检查指定输入是否具有预期的数据类型。PHP 拥有很多输入验证函数,从最简单的变量函数字符类型函数(例如 is_numeric()ctype_digit())到支持 Perl 兼容正则表达式的函数。
  • 如果应用程序期望数字输入,可以考虑使用 ctype_digit() 验证数据,使用 settype()更改其类型,或者使用 sprintf() 打印其数字表示形式。
  • 如果数据库层不支持绑定变量,则应使用特定于数据库的字符串转义函数(例如 mysql_real_escape_string()、sqlite_escape_string() 等)对传递给数据库的用户提供的非数字值进行转义。通用的函数如 addslashes() 只在非常特定的环境中有用(例如在禁用了 NO_BACKSLASH_ESCAPES 的单字节字符集 MySQL),因此最好避免使用它们。
  • 请勿以正当或非正当手段打印出任何特定于数据库的信息,特别是关于 schema 的信息。另请参阅错误报告错误处理以及日志记录函数

除此之外,如果数据库支持日志记录,还可以从脚本里或通过数据库自身记录查询语句。显然,日志记录无法阻止任何有害尝试,但它可以帮助追踪绕过了哪个应用程序。日志本身并没有用处,但通过其中包含的信息可以得到帮助。通常情况下,更详细的信息比较少的信息更好。

共 1 页 1 条数据