16.6.2 发送数据至服务器
正如本书不断强调(还将继续强调)的,不要发送任何未经过滤的数据至服务器。使用数据库扩展提供的各种函数(例如,mysqli_real_escape_string或mssql_escape_string)对输入字符串进行转义,我们将为自身提供基本的保护。
然而,正如在前面提到的,除了依赖这个函数,我们还可以对输入表单的每个域执行数据类型检查。例如,如果有用户名称域,我们可能需要确认该域长度不超过千字节(KB),而且不存在任何非法字符。通过代码的验证,我们可以提供更好的错误信息并且降低数据库的安全风险。同样的,对于数字和日期/时间类型的数据,可以在数据传递给服务器之前进行基本的验证。
最后,我们还可以在这些服务器上使用prepared statements语句。这些语句将自动执行转义以及单引号封装。
需要再次提到的,我们可以执行如下所示的测试确保数据库能够正确处理数据:
■尝试输入类似于"';DELETE FROM HarmlessTable',"的值等。
■对于数字或日期域,尝试输入一些非法值,例如,"55#$88ABC"并确保获得错误返回。
■尝试输入超过大小限制的数据并确认获得错误返回。