## 持续更新
## 整理
小白菜、goddemon
## 网络安全面试题目
### Web安全
#### web黑盒漏洞原理问题
**1.SQL注入**
- 原理:在数据交互中,前端的数据传入到后台处理时,由于后端没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。
- 种类:字符,数字,布尔,报错,延迟,联合,堆叠,宽字节,XFF等
- 修复:使用预编译,PDO,正则表达式过滤,开启魔术引号,加装WAF等
- 预编译原理:预编译将一次查询通过两次交互完成,第一次交互发送查询语句的模板,由后端的SQL引擎进行解析为AST或Opcode,第二次交互发送数据,代入AST或Opcode中执行,无论后续向模板传入什么参数,这些参数仅仅被当成字符串进行查询处理,因此杜绝了sql注入的产生。
**2.跨站点脚本攻击(XSS)漏洞**
- 原理:XSS是指恶意攻击者**利用**网站没有对用户提交数据进行转义处理或者过滤不足的**缺点**,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
- 种类:存储型,反射型,DOM型
- 区别:存储型:常出现在信息修改添加等地方,导致恶意代码被存储在数据库中,每当被攻击者访问到后就会触发执行;反射型:常出现在url中,一般需要攻击者提前构造好恶意链接,欺骗用户点击,触发攻击代码;DOM型:攻击代码在url中,然后输出在了浏览器的DOM节点中。简单比较会发现,存储和反射都经过服务器,而DOM是纯前端。
- 修复:对输入数据进行Html Encode 处理,白名单过滤,过滤JavaScript 事件的标签,开启http-only,装WAF等。
**3.XXE漏洞**
- 原理:XXE(XML外部实体注入)漏洞是一种利用XML解析器存在问题的安全漏洞,攻击者可以通过将恶意数据注入到XML文件中并发送给应用程序进行解析,从而执行恶意代码或者读取服务器上的敏感数据。主要原因是开发者没有对XML数据进行充分的校验和过滤。
- 修复:
- 使用语言中推荐的禁用外部实体的方法
- PHP:libxml_disable_entity_loader(true);
- Java:
- DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
- dbf.setExpandEntityReferences(false);
- Python:
- from lxml import etree
- xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
- 手动黑名单过滤
- 过滤 XML 中的相关关键词,比如:<!DOCTYPE、<!ENTITY SYSTEM、PUBLIC 等。
**4.服务器端请求伪造(SSRF)漏洞**
- 原理:攻击者能够通过伪装成终端用户或服务器自身,将恶意数据发送到目标网站内部网络,以达到读取敏感信息、窃取密码等危害。
- 种类:参数污染型SSRF、基于缺陷的SSRF、反射性SSRF。
- 修复:
①输入验证:对于所有从客户端输入的数据,包括URL、表单和HTTP头字段,都要进行验证和过滤,删除不必要的字符和空格,并限制输入长度。
②明确白名单:建立一个明确的白名单,只允许应用程序访问合法的资源。例如,定义一个URL库,在应用程序中仅允许访问这个库中的URL。
③限制重定向:使用HTTP响应头来限制服务器的重定向行为,避免恶意重定向导致的SSRF风险。
④检测远程地址:应用程序应该检测所有远程URLs和IP地址,以确保它们指向预期的目标并且可信。
⑤安全配置:安全地配置服务器和其他基础设施,包括对端口、协议和代理服务器的限制,以减少攻击表面。
**5.跨站点请求伪造(CSRF)漏洞**
- 原理:CSRF(跨站点请求伪造)漏洞是一种利用受害者已经登录了某个网站的身份认证信息这一事实进行攻击的手段。攻击者通过构造一个特制的请求,诱导受害者在该网站上访问并执行该请求,从而实现攻击目的。
- 种类:CSRF漏洞可以分为get型、post型和jsonp型三种类型。其中,get型攻击主要利用图片、链接等标签的src属性来触发,post型则是提交表单或请求,jsonp型则是利用JSONP跨域特性进行攻击。
- 修复:防止CSRF漏洞的方法主要有Token验证、Referer验证、使用验证码、同源检测和限制Cookie作用域等。具体来说,建议在表单和请求中加入随机生成的Token值,并在服务器端对Token进行验证;使用Referer验证来判断请求是否来源于本站;使用验证码来防止自动化攻击;限制Cookie的作用域,使其仅在必要的URL路径下生效;检查并确保应用程序不会直接响应用户提交的数据等。
**6.跨域资源共享(CORS)漏洞**
- 原理:CORS(跨域资源共享)漏洞是一种利用浏览器的同源策略存在缺陷的安全漏洞。攻击者可以通过恶意网站或者其他方式来访问受害者的敏感数据。攻击者利用CORS的特性绕过浏览器的同源策略,从而造成对目标网站的攻击。
- 种类:CORS漏洞可以分为简单请求和非简单请求两种类型。简单请求是指使用HTTP方法为GET、HEAD、POST,并且只使用了以下Content-Type值之一的请求:text/plain、multipart/form-data 或 application/x-www-form-urlencoded。非简单请求则是不符合以上条件的请求。
- 区别:简单请求的跨域请求会先发一个预检请求OPTIONS,然后再发送正式请求,而非简单请求则不会发出预检请求OPTIONS,直接发起正式请求。这也是两者最显著的区别。
- 修复:防止CORS漏洞的方法主要有限制Access-Control-Allow-Origin、使用Token验证和Referer白名单等。具体来说,建议在服务器端进行设置,禁止跨域访问;尽量避免使用Cookie作为认证凭据,而是使用Token验证;对Referer进行白名单限制,只允许指定来源的请求通过。此外,还可以使用CSRF Token来防御相关攻击,以及保证应用程序本身的安全性。
**7.远程执行代码(RCE)漏洞**
- 原理:远程执行代码(RCE)漏洞是指攻击者通过在应用程序中注入恶意代码来控制服务器上的操作系统。攻击者通常会利用该漏洞来获取敏感数据、篡改文件、植入后门等。
- 修复:防止RCE漏洞的方法主要有代码审计、输入验证、参数化查询、使用安全的API、限制文件权限等。具体来说,建议开发人员对所有的输入变量进行严格的输入验证和类型检查;不信任用户输入,避免拼接字符串来生成代码或者SQL语句;使用安全的API,如paramiko库实现SSH连接而不是使用os.system函数;限制应用程序的文件权限,禁止其访问敏感目录和文件等。此外,还可以使用沙箱技术对应用程序进行隔离,以降低攻击者对系统的危害。
**8.越权漏洞(IDOR)漏洞**
- 原理:越权漏洞原理主要是由于应用程序没有正确限制用户的访问权限,导致攻击者能够直接访问受保护的资源或数据。
- 种类:水平越权、垂直越权
- 区别:
- 水平越权漏洞发生在同一等级的用户之间。攻击者通过利用系统缺陷或者漏洞,绕过访问控制,获取到其他同级别用户的权限。例如,一个普通用户能够通过修改 URL 参数,访问到另一个普通用户的个人信息,包括用户名、密码等敏感信息。
- 垂直越权漏洞发生在不同等级的用户之间。攻击者通过利用系统缺陷或者漏洞,从低级别的用户处获取到高级别用户的权限。例如,一个普通用户能够通过修改数据表中的参数,获取到管理员账号的权限。
- 修复�