网站安全TOP10问题及其解决方案

网站安全

最常见的网站安全问题TOP10

1、Injection.

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS 注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预 期命令或访问数据。

2、Broken Authentication

通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌, 或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。

3、Sensitive Data Exposure.

许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可 以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据 容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据 以及浏览器的交互数据。

4、XML External Entities (XXE).

许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃 取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻 击。

5、Broken Access Control.

未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数 据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。

6、Security Misconfiguration.

安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云 存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。因此,我们不仅需要对所 有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。

7、Cross-Site Scripting XSS.

当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或 JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器 中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

8、Insecure Deserialization.

不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以 利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

9、Using Components with Known Vulnerabilities.

组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏 洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。同时,使用含有已知漏洞的组 件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。

10、Insufficient Logging & Monitoring.

不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持 续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超 过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

针对这10个常见的安全监控,我们网站如何做安全防护的。首先看一下我们网站的总体架构图

网站安全TOP10问题及其解决方案_第1张图片

怎么解决常见网站安全问题

1、针对Injection.问题

注入攻击排在第一位是sql注入攻击。目前网站安全以及服务器安全层面上是最具有攻击性,危害性较高,被黑客利用最多的一个漏洞,基本上针对于网站代码,包括JAVA JSP PHP ASP apache tomcat 语言开发的代码都会存在sql注入漏洞。

我们的解决方案:

开发的DAO层使用mybatis。

#{value}在预处理时,会把参数部分用一个占位符?替代,其中value表示能接受输入参数的名称。能有效的解决SQL注入的问题。

2、针对Broken Authentication问题

Authentication指的是用户身份的认证,并不介入这个用户能够做什么,不能够做什么,确认存在这个用户而已。

解决这个问题,我们系统采用的是:

Spring Security+Oauth 2.0 的 password Grant 模式!使用OpenID Connect进行身份验证 OAuth 2.0是行业标准的授权协议。它使用scope来定义授权用户可以执行的操作的权限。但是,OAuth 2.0不是身份验证协议,并且不提供有关经过身份验证的用户的信息

网站安全TOP10问题及其解决方案_第2张图片

3、针对Sensitive Data Exposure. 问题

数据是网站的最重要的资产,敏感数据则是重中之重。

我们系统采取的措施:

1、Spring Boot Actuaotr有助于对应用程序进行监控和管理,通过restful api请求来监管、审计、收集应用的运行情况。

2、对系统处理、存储或传输的数据分类,并根据分类进行访问控制。 使用Spring boot权限管理和阿里云的云账号分级。

3、确保存储的所有敏感数据被加密。数据库中敏感数据使用MD5加密。Spring Security默认情况下不允许使用纯文本密码。它还附带了一个加密模块,可用于对称加密,生成密钥和密码散列(也就是密码编码)

4、确保传输过程中的数据被加密。传输过程需要进行token的身份验证和使用https安全传输协议。并禁止缓存敏感数据。Spring Boot应用程序中强制使用HTTPS,扩展WebSecurityConfigurerAdapter并要求安全连接。

4、针对XML External Entities (XXE). 问题

如果攻击者可以上传XML文档或者在 XML文档中添加恶意内容,通过易受 攻击的代码、依赖项或集成,他们就 能够攻击含有缺陷的XML处理器。

我们系统的解决方案:

使用简单的数据格式(如:JSON),避免对敏感数据进 行序列化。

5、针对Broken Access Control. 问题

除公有资源外,默认情况下拒绝访问。

我们系统的解决方案:

1、使用一次性的访问控制机制,并在整个应用程序中不断重用它们, 包括最小化CORS使用。

2、 建立访问控制模型以强制执行所有权记录,而不是接受用户创建、 读取、更新或删除的任何记录。

3、 域访问控制对每个应用程序都是唯一的,但业务限制要求应由域 模型强制执行。

6、针对Security Misconfiguration. 问题

安全配置错误,大部分是人为失误。

我们系统的解决方案:

1、开发、质量保证和生产环境都应该进行相同配置,并且在每个 环境中使用不同的密码。这个过程应该是自动化的,以尽量减少 安装一个新安全环境的耗费。

2、检查和修复安全配置项来适应最新的安全说明、更新和补丁,并 将其作为更新管理过程的一部分

3、一个能在组件和用户间提供有效的分离和安全性的分段应用程 序架构,包括:分段、容器化和云安全组。

4、上线前使用预发布环境进行自动化脚本的检测,安全团队则是通过代码review方式,进行代码的安全检查。

7、针对Cross-Site Scripting XSS. 问题

xss攻击(跨站脚本攻击):攻击者在页面里插入恶意脚本代码,用户浏览该页面时,脚本代码就会执行,达到攻击者的目的。原理就是:攻击者对含有漏洞的服务器注入恶意代码,引诱用户浏览受到攻击的服务器,并打开相关页面,执行恶意代码。

同时还有CSRF攻击:跨站请求伪造攻击,CSRF是一种欺骗受害者提交恶意请求的攻击,并劫持受害者的身份和特权,并以受害者的身份访问未授权的信息和功能。

我们系统解决XSS攻击和CSRF攻击的一个方法同步器Token,就是在post的请求中,增加一个token,每次请求到来,服务器都会验证请求中的token和服务器期望的值是否一致,如果不一致,服务器将请求视为非法的。

我们系统使用的方案:

1、使用spring security中@EnableWebMvcSecurity。

2、阿里云云服务的云骑士,也能过滤初级的xss攻击。

3、内容安全策略(CSP)是一个增加的安全层,可帮助缓解XSS(跨站点脚本)和数据注入攻击。Spring Security 配置在Spring Boot应用程序中启用CSP标头

4、使用spring sentinel进行限流配置。

8、针对Insecure Deserialization.问题

序列化一般出现在系统之间信息交换的场景,主要避免敏感数据的泄露。

我们系统的解决方案:

1、执行完整性检查,如:任何序列化对象的数字签名,以防止恶 意对象创建或数据篡改。

2、 在创建对象之前强制执行严格的类型约束,因为代码通常被期 望成一组可定义的类。绕过这种技术的方法已经被证明,所以 完全依赖于它是不可取的。

3、 如果可能,隔离运行那些在低特权环境中反序列化的代码。发送出去的时候,对敏感字段增加transiant字段保护起来,防止被序列化。

4、 限制或监视来自于容器或服务器传入和传出的反序列化网络连接。

5、 监控反序列化,当用户持续进行反序列化时,对用户进行警告。

6、使用sentinel配置持久化。

9、针对Using Components with Known Vulnerabilities. 问题

使用已存在漏洞的组件,会造成非业务代码带来的安全损失。

我们系统的解决方案:

1、移除不使用的依赖、不需要的功能、组件、文件和文档。攻击者越来越多地针对开源依赖项,因为它们的重用为恶意黑客提供了许多受害者,确保应用程序的整个依赖关系树中没有已知的漏洞非常重要。 Snyk测试应用程序构建包,标记那些已知漏洞的依赖项。

2、利用如 versions、DependencyCheck 、retire.js等工具来持续的 记录客户端和服务器端以及它们的依赖库的版本信息。持续监控 如CVE 和 NVD等是否发布已使用组件的漏洞信息,可以使用软 件分析工具来自动完成此功能。订阅关于使用组件安全漏洞的警 告邮件。

3、 仅从官方渠道安全的获取组件,并使用签名机制来降低组件被篡改或加入恶意漏洞的风险。并根据阿里云等云服务上的提示,不断将版本升级为最安全的版本。

4、监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。

5、OWASP ZAP安全工具是针对在运行活动的应用程序进行渗透测试的代理。OWASP ZAP用于查找漏洞的两种方法是Spider和Active Scan

10、针对Insufficient Logging & Monitoring. 问题

一个系统不能保证100%的安全,但是必须所有系统都做到安全监控和日志备份,做到数据的安全

我们系统的解决方案:

1、确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下文信息,以识别可疑或恶意帐 户,并为后期取证预留足够时间。

2、确保日志以一种能被集中日志管理解决方案使用的形式生成

3、 确保高额交易有完整性控制的审计信息,以防止篡改或删除, 例如审计信息保存在只能进行记录增加的数据库表中。

4、建立有效的监控和告警机制,使可疑活动在可接受的时间内被 发现和应对。

5、建立或采取一个应急响应机制和恢复计划。

6、使用springboot+ELK+Prometheus建立日志监控报警系统,自定义metrics定义不同的监控指标。

你可能感兴趣的:(网站安全)