
登录界面如下所示:
请输入用户名:
用户名输入框,密码字段命名为 pass,类型设置为密码框。
点击登录按钮执行验证操作。
若查询结果为空,则判定为验证失败,需进行异常处理。
提示:登录失败,请核对所填信息。
}
统计数据库返回的结果行数。
若存在记录,则跳转至登录成功页面,允许后续操作。
}
否则,提示登录失败,请检查账号与密码。
}
}
从表面看,该逻辑严密合理。
然而:
存在通用登录手段
观察我输入的特殊用户名:admin’
密码可随意填写,例如111,此时生成的SQL语句将类似于:
这样一来,SQL语法仍保持完整,攻击者即可绕过认证进入系统。
万能密码的实现原理
尝试在密码中使用 or 1=1 或其他逻辑恒真表达式进行注入测试。
用户名可任意填写(如aaa),构造后的SQL语句可能变为:
此语句将匹配 administrators 表中的所有记录,导致身份验证被绕过。
防御策略
关键问题出在单引号,因其在SQL中用于界定字符串内容,属于敏感字符,容易被恶意利用。
除此之外,双引号、#号、–(注释符)等也属于高危特殊符号。
在拼接SQL语句前,必须对这些特殊字符进行转义或过滤,防止语法被篡改。
根本原因在于:用户提交的数据未经处理直接拼接到SQL命令中执行。
只要对输入中的特殊字符进行规范化转义,便可有效阻止此类攻击。
具体措施包括:
结论:任何来自用户的输入都应视为不可信!
以上就是SQL注入防范策略解析的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/30170.html
微信扫一扫
支付宝扫一扫