SQL 注入及防御技术

2019-11-25 08:56新疆崔良义
网络安全和信息化 2019年11期
关键词:攻击者语句页面

■新疆 崔良义

随着信息技术的不断发展,网络信息安全问题日益突出。本文阐述了SQL 注入对应用程序的安全隐患,最后提出了一些有效的防御措施。

SQL 注入,存在于大多数具有数据库且带有参数的网站中,具有隐蔽性,危害性极大等特点。攻击者往往通过不断尝试寻找注入点,然后构造恶意SQL 语句,将语句发送给数据库管理系统,从而达到非法查看或修改数据的目的。例如,假设已发现网站www.test.com/index.php?id=1 存在SQL 注入,通过order by 来猜测数据库的字段数,当字段数等于3 时数据库返回错误信息,那么,我们可以进一步查询出数据库的隐私信息。

显然,SQL 注入产生的主要原因就是未经检查的用户输入数据,被恶意构造成了可执行的代码,产生了开发者预期之外的动作。因而,我们可以从以下几方面加强预防。

图1 采用SQL 语句预编译和绑定变量

过滤用户传入的非法参数

通过使用WAF 等专业的防护软件系统过滤用户输入的非法参数。例如,union、and、insert、select、delete、update、mid、or、#等关键字符串的过滤,确保用户输入数据的合法性,这样就可以尽可能的防御SQL注入语句的输入。

修改Webserver 的默认错误提示

攻击者为了找到SQL 注入点,通常会通过输入非法字符串来获取服务器返回的报错信息。如果目标Web 网站开启了默认错误显示,攻击者就可通过查看页面的错误信息推测出Web网站使用的数据库和开发语言等重要信息。因此,程序员应关闭Webserver 错误提示,或自定义错误页面。对于PHP页面,可将配置文件php.ini中的display_errors 设置为Off 即可关闭错误提示。

采用SQL 语句预编译和绑定变量

例如,采用Prepared Statement 将 SQL 语句“select id,name from user where id=1”预先编译好,即通过SQL 引擎预先进行语法分析,产生语法树,生成执行计划;这样后面无论你输入什么参数,都不会影响该SQL语句的语法结构了,执行代码如图1 所示。

加密数据库信息

做好数据库账号和权限的管理,并严格加密处理用户的机密信息,防止泄露。对用户输入的数据进行加密处理,再跟数据库中数据比较,从而防止被SQL注入。

SQL 注入是当前普遍使用的一种Web 攻击手段,一旦被黑客注入成功,轻则造成非法获取数据库信息,重则直接篡改数据库内容,甚至破坏程序文件造成服务器宕机,给企业带来巨大损失。

因此,作为一名合格的程序员,应在编写程序代码时,严格做好SQL 注入防御措施,并建议企业采购专业的服务器漏洞扫描工具及WAF 等防护软件,从而为服务器多增加一层安全防范堡垒。

猜你喜欢
攻击者语句页面
刷新生活的页面
基于贝叶斯博弈的防御资源调配模型研究
答案
让Word同时拥有横向页和纵向页
正面迎接批判
正面迎接批判
我喜欢
冠词缺失与中介语句法损伤研究
作文语句实录