另一方面,SQL注入的原理SQL注入是指将SQL命令插入Web表格并提交给所在的页面请求(查询字符串),以欺骗服务器执行恶意SQL命令。
这是利用现有的APP应用程序将SQL语句插入到数据库中并执行,从而执行设计者不想要的SQL语句。
产生原因:
这是因为程序没有仔细过滤用户输入的数据,导致非法数据进入系统。
二、相关技术原理: SQL注入可分为平台层注入和代码注入。 前者是由于不安全的数据库配置和平台漏洞造成的。 或者是程序员没有仔细过滤输入。
这种攻击的秘诀是通过“嵌入”将SQL查询/行为命令放入合法的HTTP发送请求来实现攻击者的某种意图。 目前,许多动态网页都是从其网页用户的请求中获得某些参数,然后动态地配置SQL请求并将其发送到数据库。
例如,某个用户需要从web页上的用户进行登录(用户认证)的情况下,动态web页将该用户提交的用户名和密码追加到SQL询问要求中发送到数据库,该用户提交的认证信息是有的从SQL注入攻击的角度来看,这可以通过在发送SQL请求时更改用户名和密码值的“域”区域来达到攻击的目的。
但是,SQL注入的手法相当灵活,注入时经常会遇到意外情况。 必须根据情况进行分析,构建巧妙的SQL语句,成功取得想要的数据。
三. SQL注入攻击的一般流程:例如在一个登录界面上,请求输入用户名和密码。
这样输入就可以实现无账户注册。
用户名:“or1=1
密码:
登录后,如果没有进行特别处理的话,这个非法用户就得意地登录了。 (当然,当前某些语言的数据库API正在处理这些问题。)
为什么会这样呢? 让我们来分析一下:
理论上,后台身份验证程序包含以下SQL语句:
string SQL=' select * fromuser _ tablewhereusername=
“username”和password=“password”;
输入上面的用户名和密码后,上面的SQL语句可能如下:
select * fromuser _ tablewhereusername=
‘’or1=1and password=’
分析SQL语句:
如果条件之后是username=”or 1=1用户名"或等于1=1,则该条件一定成功。
然后添加两个-。 这意味着评论。 这将注释后面的句子,使他们不起作用。 这样,语句就可以永远正确执行,用户可以轻松地欺骗系统,获得合法身份。
四.防止(1)参数化语句:曾经参数化查询语句以防止SQL注入
(2)输入验证:通过白名单和黑名单验证来验证用户的输入
(3)输出编码:对程序各模块之间或各部分之间传递的数据进行编码处理
(4)正规化)拒绝所有超出规格的输入,以及解码输入代码进行分析,是两种常见的正规化处理方法
)5)用于避免SQL注入漏洞的编程(使用存储过程、处理机密数据等)
(6)安全编码规范:根据OWASP提供的安全编码规范进行相关编码