您的位置 首页 php

如何防止SQL注入

1. SQL注入概念

1.1 SQL注入简介

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

“SQL注入”是一种利用未过滤/未审核用户输入的攻击方法(”缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,就会造成一些出人意料的结果,最终达到欺骗服务器执行恶意的SQL命令。

我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输入的数据进行过滤处理。

1.2 SQL注入攻击的总体思路

1.寻找到SQL注入的位置

2.判断 服务器类型 和后台数据库类型

3.针对不通的服务器和数据库特点进行SQL注入攻击

2. SQL注入攻击实例

比如在一个登录界面,要求输入用户名和密码:

可以这样输入实现免帐号登录:

用户名: ‘or 1 = 1 –

密 码:

点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)

这是为什么呢? 下面我们分析一下:

从理论上说,后台认证程序中会有如下的SQL语句:

String sql = “select * from user_table where username=

‘ “+ username +” ‘ and password=’ “+password+” ‘”;

当输入了上面的用户名和密码,上面的SQL语句变成:

SELECT * FROM user_table WHERE username=

”or 1 = 1 — and password=”

分析SQL语句:

条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;

然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

这还是比较温柔的,如果是执行

SELECT * FROM user_table WHERE

username=” ;DROP DATABASE (DB Name) –‘ and password=”

….其后果可想而知…

3. SQL注入的解决方法

1)检查变量数据类型和格式

1、 使用正则表达式 过滤传入的参数

2、PHP函数检查变量

3、前端js检查是否包函非法字符

不灵活,要写死多个检测方法

2)过滤 特殊符号

对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。以PHP为例,通常是采用addslashes函数,它会在指定的预定义字符前添加 反斜杠 转义,这些预定义的字符是: 单引号 (‘) 双 引号 (“) 反斜杠 (\) NULL。

相对安全,只是增加黑客的难度,还是能破解

3、绑定变量,使用预编译语句

总结

觉得不错的希望可以点个赞,你的点赞是我发文的最大动力,后续还会推出一系列关于数据库的干货,敬请大家期待!

如果文章有不正之处 请大家评论批评指正 我会看心情改 也有可能不会改!

尘世中一个浪荡的程序员 只为升级打怪!

文章来源:智云一二三科技

文章标题:如何防止SQL注入

文章地址:https://www.zhihuclub.com/35173.shtml

关于作者: 智云科技

热门文章

网站地图