浅谈SQL注入

SQL注入攻击是指在特定场合向SQL语句中植入特定SQL语句,来达到破坏或更改数据的目的,常见于表单提交或者是在URL地址栏输入。

常见注入方式

-1 or 1=1

例如:在URL输入:www.XXX.com?id=1,将得到对应数据,但是如果篡改为www.XXX.com?id=-1 or 1=1,意思变为id=false or true ,将永远等于true,理论将会取出所有数据,这时的where判断将会失效。

#’ 或 ‘–

例如:使用用户名为admin密码为123456登录时SQL语句为,select * from user where username = ‘admin’ and password = ‘123456’;如果用户名更改为admin#’,密码不变,将会变成 select * from user where username = ‘admin’#’ and password = ‘123456’; #’后的将会失效,密码判断将会失效。使用’–(单引号加双中划线)会有同样效果。

那应该如何预防SQL注入的问题

在表单提交时通过JavaScript做验证

在表单提交时就通过JavaScript的正则表达式或者jQuery的插件进行判断,如果不符规格就不通过,可以有效减少服务器处理压力。

严格判断输入变量的类型和格式

通过后端程序判断是否为空,是否为整数等类型来在刚刚获取参数时就判断。

通过正则表达式

如果数据的类型符合我们的基本类型规则,那就通过正则表达式来判断是否是我们想要的具体内容。这一步和上一步在thinkPHP5中可通过框架自带的验证来解决。

进行转义

PHP addslashes() 函数可对引号进行转义。
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
PHP htmlspecialchars() 函数把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:可直接存入数据库,取出时 如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。

预编译

使用预编译也可以有效阻止SQL注入,PDO是一个很好的预编译的机制,在thinkPHP中对数据库的操作都使用了PDO。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值