当前位置:Gxlcms > 数据库问题 > SQL注入攻击

SQL注入攻击

时间:2021-07-01 10:21:17 帮助过:3人阅读

攻击者把SQL命令插入到Web表单的输入域,或者页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。   在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这种表单很容易受到攻击。   【防范方法】 ——替换单引号。 ——删除所有连字符。 ——对执行查询的数据库账户,限制其权限。 ——用存储过程来执行所有查询。 ——检查用户输入的合法性。 ——将用户登录名和密码等数据加密保存。 ——检查提取数据的查询所返回的记录数量。   ========================================================================== 【攻击网站的方法】 SQL注入,旁注,XSS跨站,COOKIE欺骗,DDOS,0day 漏洞,社会工程学等等。   【了解注入原理】 因为SQL是一种解释型语言,在运行时,是由一个运行时组件解释语言代码,并执行其中包含的指令的语言。基于这种执行方式,产生了一系列叫做代码注入(code injection)的漏洞。它的数据其实是由程序员编写的代码和用户提交的数据共同组成的。程序员在web开发时,没有过滤敏感字符,绑定变量,导致攻击者可以通过sql灵活多变的语法,构造精心巧妙的语句,不择手段,达成目的,或者通过系统报错,返回对自己有用的信息。   【java.sql.PreparedStatement】扩展自 Statement,不但具有 Statement 的所有能力而且具有更强大的功能。不同的是,PreparedStatement 是在创建语句对象的同时给出要执行的sql语句。这样,sql语句就会被系统进行预编译,执行的速度会有所增加,尤其是在执行大语句的时候,效果更加理想。而且PreparedStatement中绑定的sql语句是可以带参数的。   【注入手法】 我们提交的用户名和密码被合成到SQL查询语句当中之后是这样的: select * from users where username=‘tarena‘ and password=md5(‘admin‘)   只要构造个特殊的“字符串”,照样能够成功登录。 比如:在用户名输入框中输入:’or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为: select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘) 语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价: select * from users where username=‘‘ or 1=1#‘ and password=md5(‘‘) 等价于 select * from users where username=‘‘ or 1=1 因为1=1永远都是成立的,即where子句总是为真,将该sql进一步简化之后,等价如下select语句: select * from users 没错,该sql语句的作用是检索users表中的所有字段。   ==========================================================================

 

SQL注入攻击

标签:

人气教程排行