1、SQL注入漏洞
(1)原理:
攻击者通过在Web应用的输入点(如URL、表单提交等)插入恶意的SQL代码,从而破坏后台数据库的查询逻辑,达到未授权的数据库访问、数据泄露、数据篡改甚至数据库控制的目的。
(2)防御方法
-
对输入进行严格的转义和过滤
-
使用参数化查询:参数化查询允许将SQL语句的结构与数据分开,数据作为参数传递,而不是直接拼接到SQL语句中。
2、跨站脚本攻击(XSS)
(1)原理:
攻击者通过在目标网站上注入恶意脚本(通常为JavaScript),当用户访问被注入脚本的网站时,这些脚本会在用户的浏览器上执行,从而可能窃取用户信息、会话令牌,甚至控制用户的浏览器进行其他恶意操作。
xss有三种类型:
-
存储型XSS
它不需要用户手动触发,所有用户访问页面时都会被XSS
常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等
-
反射型XSS
需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击
常见于通过 URL 传递参数的功能,如网站搜索、跳转等
-
DOM型XSS
属于前端 JavaScript 自身的安全漏洞
(2)防御方法
-
对输入进行严格的转义和过滤
-
白名单验证(只允许数字、字母、空格以及特定标签)
3、跨站请求伪造(CSRF)
(1)原理:
(2)防御方法
-
验证HTTP Referer字段:检查HTTP请求的Referer字段,确保请求来自预期的源地址。如果Referer字段不符合预期,则拒绝该请求
-
使用CSRF令牌:在每次表单提交时,生成一个唯一的CSRF令牌,并将其存储在用户的Session中。在表单提交时验证该令牌是否匹配,如果不匹配则拒绝请求
4、服务器端请求伪造(SSRF)
(1)原理:
服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作过滤和限制。导致攻击者可操纵服务器向非预期的目标发起网络请求,从而绕过安全边界,访问或攻击受限资源。
(2)防御方法
-
输入规范化与过滤
-
白名单校验:仅允许访问预设的域名或IP
-
协议白名单:仅允许业务必需的协议(如 http、https),禁用 file、gopher、dict 等高风险协议。
5、远程代码执行(RCE)
(1)原理:
允许攻击者远程注入并执行操作系统命令或代码,从而控制后台系统。
RCE有两种
-
命令执行
调用操作系统命令进行执行
php下危险函数:exec、shell、system、popen等
-
代码执行
调用服务器网站的代码进行执行
php下危险函数:eval等
(2)防御方法
-
禁用或严格控制危险函数。
-
对用户输入进行严格过滤和验证。
6、未授权访问
(1)原理:
应用程序没有正确实施权限控制,允许攻击者访问并执行不应该被许可的敏感操作。
(2)防御方法
-
增加身份认证
-
增加权限控制机制
7、XML外部实体注入
XML(可扩展标记语言)是一种用于存储和传输数据的标记语言
(1)原理:
它允许攻击者通过在XML文档中嵌入特定的实体引用,来读取文件系统上的文件,甚至是发起网络请求,从而可能导致敏感信息泄露、服务器端执行恶意代码等安全问题。
实体引用:在XML中,实体引用允许文档包含需要由应用程序处理的外部数据。例如,<!ENTITY name SYSTEM "file:///etc/passwd">
允许引用系统文件。
DTD(Document Type Definition):在XML的DTD部分中定义实体,可以引用外部实体。例如,<!ENTITY % file SYSTEM "file:///etc/passwd">
。
XML解析:当XML解析器遇到这样的实体引用时,如果配置不当,它可能会尝试去加载和解析这些外部资源,使外部实体被执行,导致敏感信息泄露、服务器端执行恶意代码等安全问题。
(2)防御方法
-
禁用外部实体解析
-
验证和清洗输入
-
监控和日志记录
8、安全配置错误
(1)原理:
应用程序的安全配置不当,导致安全漏洞
(2)防御方法
-
遵循最佳实践进行安全配置
-
定期进行安全审计和测试
9、不安全的反序列化
(1)原理:
反序列化过程中未进行适当的安全检查,可能导致远程代码执行。
(2)防御方法
-
使用安全的反序列化库
-
对输入进行严格验证
10、使用组件不当
(1)原理:
使用未经充分测试的第三方组件,可能导致安全漏洞
(2)防御方法
-
使用经过安全测试的组件
-
定期更新和维护组件
11、不足的日志记录和监控
(1)原理:
统缺乏足够的日志记录和监控,导致难以发现和应对安全事件
(2)防御方法
-
实施详细日志记录和监控机制
-
定期审查日志