
1) 【一句话结论】
核设施门禁系统的Web界面存在SQL注入漏洞,攻击者可通过构造恶意SQL语句绕过身份验证获取用户密码,需通过参数化查询、输入验证等手段修复,并调整配置限制SQL执行权限。
2) 【原理/概念讲解】
老师口吻:SQL注入是攻击者利用Web应用未对用户输入进行充分验证和转义,将恶意SQL代码注入到数据库查询中,导致数据库执行非预期的操作。简单类比:就像给数据库发送一条“错误”的指令,原本是查询用户名“admin”,但攻击者改成“admin’ or ‘1’=’1”,让数据库返回所有用户信息。核心是“输入未验证+动态SQL拼接”导致数据库执行攻击者控制的SQL。
3) 【对比与适用场景】
| 概念 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| SQL注入 | 攻击者将恶意SQL代码注入到Web应用的数据库查询中 | 可绕过身份验证、获取敏感数据、执行任意数据库操作 | Web表单提交、搜索功能、用户管理接口等 | 需验证所有用户输入,避免动态SQL拼接 |
| XSS(跨站脚本) | 攻击者注入恶意脚本到Web页面,在用户浏览器执行 | 可窃取Cookie、篡改页面内容 | 注入到页面输出、用户评论等 | 需对输出进行转义,避免脚本执行 |
4) 【示例】
登录接口请求示例(正常):
GET /login?username=admin&password=12345
数据库查询逻辑:SELECT * FROM users WHERE username='admin' AND password='12345'
攻击者构造恶意请求:
username=admin' or '1'='1&password=12345
数据库实际执行:SELECT * FROM users WHERE username='admin' or '1'='1' AND password='12345'
结果:返回所有用户记录(因“or '1'='1'”恒为真)。
5) 【面试口播版答案】
面试官您好,针对门禁系统的Web界面SQL注入漏洞,我的处理思路如下:首先定位漏洞是通过测试输入框(如用户名、密码)构造特殊字符(如单引号)触发数据库错误或返回异常数据,验证时用“or '1'='1'”构造恶意请求,若返回所有用户信息则确认漏洞。修复方案包括代码层面改用参数化查询(如Python的psycopg2或Java的PreparedStatement),避免动态拼接SQL;配置层面限制数据库用户权限,仅允许执行必要查询,并开启SQL模式验证。这样既能防止注入,又能保障系统安全。
6) 【追问清单】
7) 【常见坑/雷区】