网站sql注入攻击原理及防御介绍

关于黑帽SEO 2021-05-27 23:40:34

我们知道一个网站做的一定的水准后,很容易被人攻击,导致网站出现异常或是打不开,亦或是网站变成了别的样子,总之是被人攻击了而造成的故障。做seo的你可以不会攻击手段,但一定要理解一些攻击原理,以便发现后好做出防御。网站攻击手段中就有一项是sql注入攻击,可能还有很多小白,不太理解,下面我们来详细介绍一下。

sql注入原理介绍

sql注入攻击是指web程序对用户输入数据的合法性的判断不够严谨或是过滤不严格,甚至是根本没有经过判断,这样的情况下,攻击者就可以在web程序中原本设定好的查询语句的结尾添加额外的sql语句,以此来欺骗数据库服务器执行一些非正当的操作,然后获取服务器信息和权限。

一般来说sql注入是通过表单提交、输入域名或页面请求的查询字符串中,插入sql命令,使服务器执行恶意的命令,比如修改数据,提权等操作。

sql注入可操作性的界面包含,登录界面,留言表单提交界面,站内搜索界面,这些都可能有被sql注入入侵风险。

sql注入操作原理步骤

1、寻找可以注入的点,构造特殊的sql语句。

语句有两种:数字类型,参数不用被引号括起来,如?id=1 ;

其他类型,参数要被引号扩起来,如?page="one";

2、用户构造sql语句,如:'or 1=1#;admin'#。

3、语句发送给数据库,数据库开始执行语句,数据库管理系统(DBMS)收到返回的结果,执行代码指令,执行一些操作。

4、数据库讲处理好的结果,返回给用户,从这个结果上攻击者就能清晰的了解到一些漏洞,从而攻破。

攻击者在登录界面,用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:

select * from users where username='' or 1=1#' and password=md5('')

其中“#”在mysql中是注释符,这样的话"#"后的语句将被mysql视为注释内容,就不会去执行,换句话说,以下的两句sql语句等价: select* from users where usrername='' or 1=1,1=1永远是成立的,不用输入用户名照样可以登录。

还有就是很多人把用户名命名成admin,很多攻击者就会尝试直接输入用户名,然后破解密码登录,构造语句:

select * from users where username='admin'#' and password=md5('')等价select * from users where username='admin'。

也就是说,不需要密码直接就可以登录了,连验证码都不需要。

这样来看的话其实,sql注入的风险还是很高的,大家需要提前预防。

sql注入防御措施:

1、关闭无用的表单提交页面,搜索页面。用户名千万不要默认admin,过于简单,很容易被入侵。

2、登录页面对特殊字符(?,=,'',#)进行过滤,不能被执行,无法输入等。

3、采用 sql语句预编译和绑定变量,预先编译好的语法,会严格按照语法执行,后面不管你输入什么参数,都是无效的。

4、严格检测参数的数据类型,使用一些安全函数,防止注入。如接收到用户输入的参数后,就严格检查 id,只能是int型,复杂参数则使用规则进行判断过滤。

以上就是对于“网站sql注入攻击原理及防御”的内容总结,希望对大家有所帮助。我是熊熊SEO,干货持续更新中,敬请关注。

版权声明

本文系熊熊SEO发表,转载必须留链接,否则必究

分享:

扫一扫在手机阅读、分享本文