Web安全技术分享

今天看到一篇有意思的关于Web安全的文章,再加上今天有点时间,所以做了点总结做个分享

1.跨域资源共享(CORS)漏洞

1.1 描述

CORS(Cross-Origin Resource Sharing)是一种机制,允许在一个域名下的网页应用程序访问另一个域名下的资源。

如果未设置正确的请求限制,攻击者利用CORS机制中的安全漏洞,通过跨域请求获取非法访问目标网站的资源或执行恶意操作。

所以浏览器为了保护用户信息安全,需要遵循 同源策略(浏览器的一项基本安全措施,它限制了从一个源加载的文档或脚本如何与来自其他源的资源进行交互),什么样的请求是非同源的呢?

协议、域名、端口号完全相同时,才是同源。

协议就是http、https(简单理解https更安全)

域名就是www.example.com这种

端口号就是域名冒号后面接着的数字,8080这种

在同源策略下,会有以下限制:

  • 无法获取非同源的 Cookie、LocalStorage、SessionStorage 等
  • 无法获取非同源的 dom
  • 无法向非同源的服务器发送 ajax 请求

1.2 验证方法

  1. 发起跨域请求:使用浏览器或其他工具,向目标系统发送跨域请求。可以通过修改请求头中的Origin字段来指定不同的源。

  2. 观察响应头:检查目标系统返回的响应头中是否包含Access-Control-Allow-Origin字段。如果响应头中的Access-Control-Allow-Origin值为"*"或与请求中的Origin值相匹配,则表示目标系统存在CORS漏洞,允许跨域访问。

  3. 检查敏感操作:如果目标系统返回的响应中包含敏感信息或执行了未经授权的操作,那么也意味着可能存在CORS漏洞,攻击者可以通过跨域请求获取和操作这些敏感信息。

1.3 影响范围

常见的CORS攻击包括:

  1. CSRF(Cross-Site Request Forgery)攻击:攻击者在其他网站上伪造请求,以获取目标网站的资源或执行操作。

  2. 攻击者构造恶意网页,在其中插入跨域请求,以获取受害者在目标网站上的敏感信息。

  3. 利用CORS漏洞,攻击者可以通过跨域请求执行未经授权的操作,例如修改用户信息、发起未经授权的付款等

1.4 修复建议

1.1中介绍了浏览器的同源策略,server端如果未正确设置响应头,则会出现报错,

所以需要设置 Access-Control-Allow-Origin 允许跨域。

先说明为什么要设置 Access-Control-Allow-Origin,可以把 Access-Control-Allow-Origin 当作一个指令,服务端设置 Access-Control-Allow-Origin 就是告诉浏览器允许向服务端请求资源的域名,浏览器通过 Response 中的 Access-Control-Allow-Origin 就可以知道能不能把数据吐出来。

2、跨站脚本攻击(XSS)

2.1 描述

跨站脚本攻击
(Cross Site Scripting),为不和层叠样式表 (Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 Web页面里插入恶意 Script代码,

当用户浏览该页之时,嵌入其中 Web里面的 Script代码会被执行,从而达到恶意攻击用户的目的。

在不同场景下, XSS有相应不同的表现形式,主要分为反射型、存储型以及 DOM型的跨站脚本攻击,所造成的影响主要是窃取用户登录凭证( Cookies)、挂马攻击、页面访问挟持等。

2.2 验证方法

  • 手工测试
  1. 反射型XSS测试:
    对提交页面的各个参数依次进行XSS注入测试,判定是否存在 XSS漏洞。
    如:http://www.target.com/xss.jsp?id=1&name=2 依次对id、name两个参数进行两个参数进行XSS测试;
    测试:
    对id参数进行测试:
    http://www.target.com/xss.jsp?id=1”><script>alert(/xxx/)<!–&name=2
    根据返回页面是否弹出包含xxx字符串的窗口判定是否存在反射型字符串的窗口判定是否存在反射型XSS;
    其他测试语句如下:

    ‘><script>alert(/xxx/)</script><!—

    “ onerror=alert(/xxx/) t=”

    “ onmousemove=alert(/xxx/) t=”

    ‘><img src=# onerror=alert(1)>

    ‘><iframe src=http://www.baidu.com><’

  2. 存储型XSS测试:

在页面表单提交过程中,依次对提交参数进行XSS测试;
测试: 
对参数进行修改,提交参数语句:

‘><script>alert(/xxx/)</script><!—

“ onerror=alert(/xxx/) t=”

“ onmousemove=alert(/xxx/) t=”

‘><img src=# onerror=alert(1)>

</textarea><script>alert(123)</script><!--

‘><iframe src=http://www.baidu.com><’

根据返回页面是否弹出包含xxx字符串的窗口判定是否存在存储型字符串的窗口判定是否存在存储型XSS;
 

2.3 影响评估

XSS(跨站脚本攻击)是一种常见的网络安全威胁,其危害主要包括以下几个方面:

    1. 窃取用户信息:通过在受害网站上注入恶意脚本,攻击者可以窃取用户的Cookie、Session ID等敏感信息,从而获取用户的身份认证凭据。

    2. 篡改网页内容:攻击者可以利用XSS漏洞修改网页内容,包括植入虚假链接、欺骗性的弹窗或者篡改页面布局,从而误导用户执行恶意操作。

    3. 劫持用户会话:通过XSS攻击,攻击者可以劫持用户的会话,以受害用户的身份执行各种操作,包括发起恶意交易、发布虚假信息等,从而对用户和网站造成损失。

    4. 传播恶意软件:攻击者可以利用XSS漏洞向访问者分发恶意软件,通过植入恶意的JavaScript代码或者重定向到恶意网站,使用户的计算机感染病毒或者恶意软件。

总的来说,XSS攻击的危害非常严重,可能导致用户隐私泄露、财产损失,甚至损害整个网站的声誉。因此,网站开发人员和管理员应当积极采取措施,包括加强输入验证、使用安全的编程实践、及时修补漏洞等,以防范XSS攻击带来的危害。

2.4 预防措施

从前端角度来看,以下是一些防止XSS攻击的前端措施:

    1. 输入验证和过滤:在前端对用户输入进行验证和过滤,确保只接受预期的数据类型和格式。可以使用正则表达式或内置的验证函数对输入进行验证,以防止恶意脚本的注入。

    2. 输出编码:在将用户输入插入到网页中时,使用适当的输出编码方式进行处理,以确保任何潜在的恶意脚本都被正确地转义。常用的输出编码方式包括HTML实体编码、URL编码等。

    3. 使用安全的JavaScript框架:选择使用经过安全审计和更新频繁的JavaScript框架,在其内部实现中已经考虑了XSS的防御措施,例如自动进行输出编码、提供安全的DOM操作等。

    4. 设置HTTP头部:通过设置适当的HTTP头部来提供额外的保护。例如,在响应中设置Content Security Policy(CSP)头部来限制页面可以加载的资源和执行的代码。

    5. 阻止内联脚本:避免在HTML标签的事件属性(如onclick)中直接插入JavaScript代码,而是通过绑定事件的方式来处理用户交互。

从后端角度来看,以下是一些防止XSS攻击的后端措施:

    1. 输入验证和过滤:在后端对用户输入进行验证和过滤,避免接受和处理恶意的数据。可以使用正则表达式、白名单过滤器或安全的HTML编码库来过滤用户输入。
      校验规则建议如下:

      建议过滤的关键字为: [1] ' 单引号 [2] " 双引号 [3] / 斜杠 [4] 反斜杠 [5] ) 括号 [6] ; 分号 [7] [ 中括号中括号 [8] < 尖括号尖括号 [9] > 尖括号尖括号 比如把 比如把<编码为编码为

    2. 输出编码:在将用户输入插入到网页中时,使用适当的输出编码方式进行处理。根据后端开发语言,使用相应的编码函数来确保输出的数据被正确地转义。

    3. 使用模板引擎:使用安全的模板引擎,例如Handlebars、Mustache等,在模板渲染过程中自动进行输出编码,以减少手动编码的风险。

    4. 安全的Cookie处理:在后端设置Cookie时,使用HttpOnly标志和Secure标志,以防止恶意脚本通过JavaScript访问和窃取Cookie
      ps: 系统如果被嵌套,那cookie设置HttpOnly=true  会影响到嵌套系统访问cookie

    5. 安全的会话管理:采用安全的会话管理机制,包括合适的会话过期策略、随机生成的会话ID和对会话ID的验证。

    6. 持续安全审计:定期对后端代码进行安全审计和漏洞扫描,及时修复和更新发现的漏洞。

无论从前端还是后端角度,防止XSS攻击的关键是输入验证、输出编码和使用安全的框架/库。同时,持续的安全意识和定期的安全审计也是非常重要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值