如何从根本上防止 SQL 注入

小编 826

从根本上防止SQL注入的方法有:1.参数化查询;2.检验用户输入的信息;3.用存储过程来执行所有的查询;4.限制字符串输入的长度;5.使用陷阱账户;6.进行安全测试和安全审计。参数化查询是指在设计数据库时,用户输入的数据不直接内嵌到SQL语句中,而通过参数来进行传输。

1.参数化查询

参数化查询目前被视作是预防SQL注入攻击最有效的方法。参数化查询是指在设计与数据库连接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter)来给值。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL 语句的一部分来进行处理,而是在数据库完成SQL语句的编译之后,才套用参数运行。因此就算参数中含有破坏性的指令,也不会被数据库所运行。

2.检验用户输入的信息

在SQL Server数据库中,有比较多的输入內容检验工具,能够协助管理人员来应对SQL注入式攻击:检测字符串的內容,只接纳需要的值;拒绝包括二进制、转义序列和注释內容,这有利于预防脚本注入。

检测输入内容的大小和数据类型,强制执行适度的限定与变换,这有利于避免缓冲区溢出。

3.用存储过程来执行所有的查询

SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

4.限制字符串输入的长度

如果用户的登录名字非常多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

5.使用陷阱账户

可以设定两个账户,即管理员账户和防注入账户。将防注入的账户伪装成管理员账户,如将名称设置为admin,让检测软件产生错觉,在密码方面,可以设置成超长的中文字符(几千字),让攻击者的漏洞检测软件达到高负荷状态直至资源耗尽。

6.进行安全测试和安全审计

除了开发规范,还需要合适的工具来确保代码的安全。我们应该在开发过程中应对代码进行审查,在测试环节使用工具进行扫描,上线后定期扫描安全漏洞。通过多个环节的检查,一般是可以避免SQL 注入的。

延伸阅读

SQL注入是什么

SQL注入是发生在Web 程序中数据库层的安全漏洞,是网站存在非常多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在Web 应用程序中事先定义好的SQL 语句中添加额外的SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。

SQL注入的位置包括:1.表单提交,主要是POST请求,也包括GET请求;2.URL参数提交,主要为GET请求参数;3.Cookie参数提交;4.HTTP请求头部的一些可修改的值,比如Referer、User_Agent等。

SQL注入可能带来的危害有:1.数据中存放的用户的隐私信息的泄露;2.通过操作数据库对特定网页进行篡改;3.数据库服务器被攻击,数据库的系统管理员账户被篡改;4.服务器被远程控制,被安装后门;5.删除和修改数据库表信息。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部