SQL注入面试题及详细答案(实战版)_第1页
SQL注入面试题及详细答案(实战版)_第2页
SQL注入面试题及详细答案(实战版)_第3页
SQL注入面试题及详细答案(实战版)_第4页
SQL注入面试题及详细答案(实战版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL注入面试题及详细答案(实战版)本次面试题分为基础概念、原理漏洞、实战利用、防御方案、场景拓展五个模块,适配初级、中级后端开发、安全测试岗位面试,内容贴合企业真实面试提问场景,无理论空话。一、基础概念题(入门必问)1、什么是SQL注入?核心原理是什么?参考答案:SQL注入是一种常见的Web安全漏洞,核心成因是程序直接将用户可控的输入数据,拼接进SQL语句中执行,没有做过滤、转义或预处理。攻击者可以构造特殊的恶意输入字符,篡改原本的SQL语句逻辑,让数据库执行开发者预期之外的操作,最终实现查询、篡改、删除数据,甚至获取服务器权限等恶意行为。简单来说:用户输入被当成SQL代码执行了,脱离了正常业务逻辑约束。2、SQL注入的产生条件有哪些?缺一不可参考答案:需要同时满足三个条件,才会存在SQL注入漏洞:1.用户可控输入:前端传参、URL参数、Cookie、POST数据等,用户可以任意修改的参数;2.参数直接拼接SQL:后端代码没有使用预编译,直接把输入参数拼接到SQL语句中;3.数据库正常执行语句:数据库能够识别并执行拼接后的恶意SQL语句,且无权限、策略拦截。3、SQL注入和XSS漏洞的核心区别是什么?参考答案:1.攻击对象不同:SQL注入针对数据库,窃取、篡改后台数据;XSS针对前端用户浏览器,窃取用户Cookie、劫持会话、弹窗钓鱼;2.执行位置不同:SQL注入恶意代码在服务端数据库执行;XSS恶意代码在客户端浏览器执行;3.核心危害不同:SQL注入主打数据泄露、删库、拖库;XSS主打用户账号劫持、前端页面篡改。二、原理与分类题(中级高频)4、SQL注入有哪些常见分类?详细说明参考答案:行业内最常用的分类方式,按照注入回显和执行方式划分:1.显错注入(报错注入)页面会直接返回数据库报错信息,攻击者可以借助报错信息,拆解数据库结构、数据。适用于页面开启SQL错误回显的场景。2.布尔盲注页面无报错、无数据回显,只有正常/异常两种页面状态(比如页面显示正常、页面空白)。攻击者通过构造真假语句,逐位猜测数据库数据。3.时间盲注页面无任何状态变化、无报错、无回显。通过插入延时函数(sleep、benchmark),根据页面响应时间判断语句执行结果,逐位爆数据。4.堆叠注入支持多条SQL语句同时执行(分号;分隔),可以执行查询、删除、修改、新增等任意语句,危害极大。MySQL、SQLServer支持,Oracle默认不支持。5.宽字节注入针对GBK编码漏洞,利用数据库宽字节特性,吃掉转义符\,绕过单引号转义过滤,常用于绕过基础防注入机制。5、什么是宽字节注入?原理是什么?如何防御?参考答案:原理:当数据库编码为GBK,后端使用addslashes等函数对单引号'转义,会在单引号前加\。攻击者输入%df%27,数据库将%df%5c(转义的\)解析为一个GBK汉字,直接吃掉转义符,导致单引号逃逸,成功闭合SQL语句,触发注入。防御方式:统一全站编码为UTF-8,杜绝GBK编码场景;禁用宽字节解析;优先使用预编译语句。6、堆叠注入和普通联合查询注入的区别?参考答案:1.联合查询(union)只能执行查询语句,仅能读取数据,权限有限;2.堆叠注入通过分号分隔多条SQL,可执行增删改查、建表、删库等所有数据库操作,危害远大于联合注入;3.多数网站框架会限制堆叠注入,屏蔽分号,但是联合注入限制较少。三、实战利用题(面试手写高频)7、写出最基础的SQL注入万能密码,说明原理参考答案:常见万能密码:'or1=1#、'or1=1--原理:原登录SQL语句:select*fromuserwhereusername='$name'andpassword='$pwd';输入'or1=1#后,语句变为:select*fromuserwhereusername=''or1=1#'andpassword='$pwd';单引号闭合前面的字符串,1=1恒成立,#注释掉后面所有语句,最终where条件永久为真,直接查询出所有用户数据,实现无密码登录。注:--后面必须加空格,#为MySQL专用注释符。8、Union联合注入的使用条件是什么?参考答案:1.前后两条查询语句的字段数量必须一致;2.对应字段的数据类型需要兼容;3.原SQL语句查询结果页面有数据回显位置;4.数据库未屏蔽union关键字。9、布尔盲注核心思路是什么?写一段通用逻辑参考答案:核心思路:无回显、无报错,通过构造真假条件,根据页面返回状态判断数据。通用语句示例:?id=1'andascii(substr(database(),1,1))>100#1.substr截取数据库名称第n位字符;2.ascii将字符转为ASCII码;3.通过大小比对,判断字符范围,二分法逐位爆破出完整数据。10、时间盲注适用场景和核心语句是什么?参考答案:适用场景:页面无报错、无数据、无布尔状态差异,完全静默的注入场景。核心原理:利用sleep()延时函数,条件为真则执行延时,页面响应变慢;条件为假则正常响应。通用语句:?id=1'andif(ascii(substr(database(),1,1))=115,sleep(3),1)#如果页面延迟3秒返回,说明判断条件成立,以此逐位猜解数据。四、防御方案题(面试核心重点)11、简述SQL注入最核心、最有效的防御手段参考答案:首选方案:使用预编译SQL(参数化查询)MyBatis、PDO、JDBC预编译等,将SQL语句结构和用户输入参数完全分离,用户输入只会被当做普通字符串处理,不会被解析为SQL代码,从根源杜绝注入。注意:MyBatis中#{}是预编译(安全),${}是直接拼接(存在注入风险),开发中禁止随意使用${}接收用户参数。12、除了预编译,还有哪些辅助防御手段?参考答案:1.输入过滤校验:对用户参数做白名单校验,比如ID只允许数字,禁止特殊符号、关键字;2.权限最小化:数据库业务账号仅授予查询、新增等必要权限,禁止root、sa等高权限账号,禁止删库、改表权限;3.关闭错误回显:生产环境关闭数据库SQL报错信息,避免泄露库表结构,杜绝报错注入;4.WAF防护:部署Web应用防火墙,拦截union、or、sleep等恶意关键字和注入载荷;5.特殊字符转义:对单引号、双引号、分号、反斜杠等特殊字符统一转义处理;6.禁止堆叠语句:框架层面屏蔽分号、多行SQL执行。13、为什么过滤关键字(or、union)不能彻底防御SQL注入?参考答案:1.攻击者可以使用变形绕过:比如Or、UNION、uNioN大小写混淆,双写绕过(oorr);2.部分注入无需核心关键字,比如时间盲注、报错注入可通过函数绕过关键字拦截;3.关键字黑名单永远滞后于攻击手法,无法覆盖所有载荷,只能做辅助防护,不能当主力防御。五、场景面试题(高阶问答)14、MyBatis中#{}和${}的区别,以及对应的安全风险参考答案:1.#{}预编译参数会对参数进行占位符替换、自动转义,参数仅作为普通值,无法拼接SQL逻辑,无注入风险,日常业务查询优先使用。2.${}直接字符串拼接直接将用户输入拼接到SQL语句中,无转义、无预编译,存在严重SQL注入漏洞。特殊场景:排序、表名动态查询必须用${},此时需要手动做白名单过滤,严格校验输入内容。15、Cookie注入是什么?如何发现和防御?参考答案:Cookie注入是后端直接读取Cookie中的参数,拼接到SQL语句执行,属于隐形注入漏洞,容易被忽略。发现方式:修改Cookie内参数,插入单引号、恶意语句,观察页面报错、延时变化。防御方式:所有用户可控参数(GET/POST/Cookie/Header)统一做预编译处理,不区分参数位置,全局统一防护。16、简述SQL注入的完整危害等级参考答案:1.低危:仅可查询部分公开数据,无敏感信息泄露;2.中危:可查询用户手机号、账号、密码等敏感数据,造成数据泄露、拖库;3.高危:可篡改、删除业务数据,干扰网站正常业务运行;4.严重危:高权限数据库账号,可新建数据库用户、获取服务器权限、控制整站数据,造成业务瘫痪、数据全部泄

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论