sql注入:
SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
sql注入步骤:
- 寻找注入点,构造特殊的语句
传入SQL语句可控参数分为两类 :
a.斜体样式数字类型,参数不用被引号括起来,如?id=1
b.其他类型,参数要被引号扩起来,如?name=“phone” - 用户构造SQL语句(如:‘or 1=1#;admin’#
- 将SQL语句发送给DBMS数据库
- DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到操作
- DBMS接受返回结果,处理后,返回给用户
前一篇的从数据库中查询用户登录信息的sql语句并不是安全的,存在sql注入的风险
如当输入以下密码,发现账号和密码都不对竟然登录成功了
请输入用户名:
张小风
请输入密码:
a’ or ‘1’='1
登录成功
分析:
select * from userlogin where loginname=‘张小风’ and passwd=‘a’ or ‘1’=‘1’
loginname=‘张小风’ and passwd=‘a’ 为假
‘1’=‘1’ 真
相当于
select * from userlogin where true; 查询了所有记录
让用户输入的密码和 SQL 语句进行字符串拼接。用户输入的内容作为了 SQL 语句语法的一部分,改变了
原有 SQL 真正的意义,以上问题称为 SQL 注入。要解决 SQL 注入就不能让用户输入的密码和我们的 SQL 语句进
行简单的字符串拼接。