免费建网站的服务器,企业微信网站建设方案模板,深圳罗湖网站开发,怎么免费做公司网站SQL注入攻击的原理
原理#xff1a;将SQL命令插入到web表单递交或输入域名或页面请求的查询字符串#xff0c;最终达到欺骗服务器#xff0c;执行恶意的SQL命令
SQL注入攻击的主要原因
SQL注入主要原因是程序员在开发用户和数据库的系统时没有对用户输入的字符串进行过滤…SQL注入攻击的原理
原理将SQL命令插入到web表单递交或输入域名或页面请求的查询字符串最终达到欺骗服务器执行恶意的SQL命令
SQL注入攻击的主要原因
SQL注入主要原因是程序员在开发用户和数据库的系统时没有对用户输入的字符串进行过滤、转义、限制或处理不严谨导致攻击者可以通过精心构造的字符串去非法获取到数据库中的数据。 对于Java数据库连接JDBC而言SQL注入攻击只对Statement有效对PreparedStatement是无效的这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。 SQL注入攻击的两种形式
1.直接注入式攻击法直接将代码插入到与SQL命令串联在一起缤纷使得其得以执行的用户用户输入变量。
2.间接的攻击方法将恶意代码注入要在表中存储或者作为原数据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中以执行一些恶意的SQL代码。 注入攻击的过程
提前终止文本字符串然后追加一个新命令由于插入的命令可能在执行前追加其他字符串因此攻击者常常用注释标记“—”来终止注入的字符串。执行时系统会认为此后语句位注释故后续的文本将被忽略不被编译与执行。
SQL攻击的示例
假如我们有一个users表里面有两个字段username和password。用sql拼接的方式进行用户验证。比如 select id from users where username username and password password 这里的username和password都是我们存取从web表单获得的数据。
下面我们来看一下一种简单的注入如果我们在表单中username的输入框中输入 or 11-- password的表单中随便输入一些东西假如这里输入123.
此时我们所要执行的sql语句就变成了 select id from users where username or 11-- and password 123 我们来看一下这个sql因为11是true后面 and password 123被注释掉了。所以这里完全跳过了sql验证
SQL攻击的防御
使用预编译语句
绑定变量攻击者无法改变SQL的结构。不同的编程语言Java、Php有不同的语法
使用存储过程
使用安全的存储过程对抗SQL注入由于存储过程中也可能存在SQL注入问题应尽量避免使用动态SQL语句。
检查数据类型
例如需要输入的是整型那么可以判断用户的输入如果包含非整型例如字符串AND、“BENCHMARK”等则不运行sql语句。其他类型例如邮箱等可以通过使用正则表达式来进行判断。
使用安全函数
各个厂商都有一些安全函数例如微软SQL安全函数