sql注入及一些处理方法

发布于:2022-12-25 ⋅ 阅读:(238) ⋅ 点赞:(0)

SQL注入及如何避免

SQL注入是什么,如何避免SQL注入?

定义

sql注入实际上就是在用户输入的字符串中加入sql语句,如果在程序设计中忽略了检查,那么这些加入的sql语句就会被数据库服务器误认为是正常的sql语句从而参与运行。攻击者便可借此得到未经授权的数据。

原理

1.恶意拼接查询

传入的参数中拼接了其他的sql语句 导致执行了注入的非法sql

SELECT * FROM users WHERE user_id = **$user_id**
SELECT * FROM users WHERE user_id = **1234; DELETE FROM users**

2.利用注释执行非法命令

传入的参数中加入了”–“ 这导致后面内容被判定为注释

SELECT COUNT(*) AS 'num' FROM game_score WHERE game_id=24411 AND version=$version
SELECT COUNT(*) AS 'num' FROM game_score WHERE game_id=24411 AND version='-1' OR 3 AND SLEEP(500)--

3.传入非法参数

非法参数 ’ 的出现会导致查询条件值的改变

SELECT * FROM user_name WHERE user_name = $user_name
SELECT * FROM user_name WHERE user_name ='G'chen'

4.添加额外条件

额外条件导致所有用户密码被更改

UPDATE users SET userpass='$userpass' WHERE user_id=$user_id;
UPDATE users SET userpass= '123456' WHERE user_id=1234 OR TRUE;

避免SQL注入的一些方法

  • 过滤输入内容,校验字符串:数据提交到数据库之前,对其中的不合法字符进行剔除。也可以验证输入数据的类型是否符合要求。
  • 参数化查询:目前被认为是最有效的预防sql注入方法。需要填入数据的地方,使用参数(Parameter)来给值 先把参数用?代替 ,再编译后再填入参数具体值。就算有破坏指令,也不会被执行
  • 安全测试、安全审计:开发中对代码进行审查,测试环节进行测试,上线后定期扫描安全漏洞

开发中一些可以避免注入的方法

  • 避免使用动态sql 最好使用准备好的语句和参数化查询 避免将用户输入的数据直接放入sql
  • 不要将敏感数据保留在纯文本中 加密数据库中的敏感数据 以防攻击者排出敏感数据
  • 限制数据库访问权限和特权
  • 避免直接向用户显示数据库报错 攻击者可能使用这些错误消息来获取数据库信息

网站公告

今日签到

点亮在社区的每一天
去签到