当你的数据库连接到Internet之后,你永远都不能百分之百地保证其安全。你的目标是将暴露在外的东西减到最小,这样才能够减少入侵者取得访问权的机会。要游离于安全威胁是很困难的,但是还是有一些非常基本的方式,能够让你保证数据的安全和编写可维护性更强的代码。
入侵者进行攻击的最常见方法叫做“流量注入攻击法(injection attack)”。这些攻击利用你的用户界面和直接查询方法,将异常的信息传递给你的数据库。通过直接查询,我的意思是说,你的代码就像Listing
A里的代码那样。
这段代码是直接对数据库执行的。现在,如果你的Web应用程序(或者真正进行这项任务的任何应用程序)有一个要求填写你姓氏的注册系统,那么攻击者就能够将DELETE
* FROM Users输入到这个字段里,并提交这个表单。当所有的用户被删掉之后,你就最好希望自己每天晚上都进行了备份。
但是,这些攻击能够被轻易地挡住,只要你对自己的表格使用了带有参数的存储过程,也叫做SPROC,而不是使用直接查询。你除了能够从执行预编译程序所获得的性能提高之外,使用带有参数的SPROC还会让你的应用程序获得更高程度的抽象化。你可以更改自己表格的名称或者数据处理程序,而不需要改变数据访问层的任何东西,因此也就不需要重新编译和重新部署你的应用程序了。更进一步说,如果有人试图将SQL陈述式导入你的表单里,那么SPROC就会提示一个句法错误,并停止继续执行。这是保护你的资源免受攻击最简单的方法,也是我最强烈的建议。