XSS,CSRF攻击及预防等一些web安全问题

一.XSS

1.定义
xss中文名:跨站脚本攻击。
xss的重点不在于跨站点,而是在于脚本的执行,当用户浏览该页面的时候,那么嵌入到web页面的script代码会执行,因此会到达恶意攻击用户的目的
2.分类(3种)

  • .反射型(非持久(一次性)、需要服务器)
    一般指攻击者通过诱惑的方式来诱惑用户去访问一个包含恶意代码的url,当点击时就会直接在主机浏览器上执行(会获取cookie的信息)

  • 存储型(持久、需要服务器)
    主要是将上传或储存到服务器,下次只要用户访问了页面就会执行恶意代码

  • DOM型(非持久(一次性)、不需要服务器)
    主要就是基于页面修改,不需要交互

用cookie的安全策略预防xss
在服务器端设置cookie的时候设置http-only为true,这样子就可以防止用户通过js来获取cookie了http-only只允许http跟https读取cookie
secure-only只允许https请求读取

常见的预防:

  • 改纯前端渲染,把代码跟数据分开
  • 对HTML做充分的转义
    vue/react已经做了防止这个攻击

二 CSRF

1.定义
CSRF中文名:跨站请求伪造
可以理解为攻击者盗用了用户的身份,用用户的名义去发送恶意请求
在没有退出的情况下访问了恶意网站,就会把安全信息就会到了黑客手里
在这里插入图片描述

预防:
判断Referer这个头,http会去请求这个头,如果不是直接的网站则返回错误

三 SQL注入

在拼接 SQL 时没有考虑过滤,用户可提交数据改变语义。比如提交了这样的数据id=-1 or 1=1等。1=1 永远是true,导致where语句永远是ture.那么查询的结果相当于整张表的内容,攻击者就达到了目的。用户还可以通过控制台上的报错信息推测出 SQL 语句信息等。
预防:

  1. 尽量禁止利用动态拼接字符串的方式直接访问数据库
  2. 对数据库的操作赋予权限控制
  3. 净化和过滤掉where, or, exec 等不必要的SQL保留字
  4. 尽量减少数据库抛出的错误信息

点击劫持

诱导用户点击看似无害的按钮(实则点击了透明度为0的 iframe 中的按钮)
时刻监听鼠标移动事件,让攻击者设置的按钮始终跟在鼠标下方
点击劫持(Clickjacking)是一种Web安全攻击技术,旨在欺骗用户在不知情的情况下执行意外的点击操作。攻击者通过将恶意网站的内容叠加在诱导用户点击的诱饵页面上,从而使用户在点击看似无害的内容时实际上触发了恶意操作。

点击劫持的原理是利用了浏览器的层叠特性和透明属性,将恶意网站的内容叠加在目标网站的页面上,并调整样式使其透明或隐蔽,使用户无法察觉。当用户点击看似无害的内容,实际上点击的是恶意网站的按钮或链接,触发了攻击者预设的操作,如提交表单、激活敏感操作等。

点击劫持的危害包括:

窃取用户的敏感信息,如密码、账号等。
以用户身份执行未经授权的操作,如转账、修改账户信息等。
进行社工攻击,通过欺骗用户完成特定操作,如点击广告、下载恶意软件等。
预防:
可以在服务端添加 X-Frame-Options这个 响应头, 这个 HTTP 响应头是为了防御用 iframe 嵌套的点击劫持攻击。这样浏览器就可以阻止嵌入网页的渲染。(用于指示浏览器是否允许将当前页面嵌入iframe或frame中)
JS 判断顶层视口的域名是不是和本页面的域名一致,不一致则不允许操作,

top.location.hostname === self.location.hostname;

使用Content Security Policy(CSP):CSP是一种安全策略,通过限制页面中可加载的资源和脚本来源,防止恶意网站的注入和执行。
JavaScript防御:通过JavaScript代码判断页面是否在顶级窗口中运行,如果不是,则可能受到点击劫持攻击,可以采取相应的防御措施,如跳转到安全页面或提示用户。

如何合理的使用iframe,以增强安全性和防御点击劫持

  1. 明确设置iframe的属性:
  • 设置sandbox属性:使用sandbox属性可以限制iframe中加载的内容的权限,例如禁止表单提交、脚本执行等。
  • 设置allow属性:使用allow属性可以明确允许iframe中加载的内容执行某些功能,如允许执行JavaScript、显示通知等。
    使用X-Frame-Options头信息:
  1. 服务器可以通过设置X-Frame-Options响应头来控制页面是否可以被嵌入到iframe中。合理设置X-Frame-Options可以防止点击劫持攻击。
  2. 使用Content Security Policy(CSP):
    CSP可以限制页面中加载的资源和脚本来源,从而防止恶意网站的注入和执行。通过设置合适的CSP策略,可以限制iframe中加载的内容,提高安全性。
  3. 显式设置iframe的样式和位置:
    避免将iframe设置为透明或隐蔽,确保用户能够看到iframe的存在,并能够辨认出与iframe相关的交互元素。
  4. 仅加载可信任的内容:
    仅加载来自可信任源的内容到iframe中,避免加载不可信或未知的来源。
  5. 验证和授权:
    在向iframe中嵌入内容之前,验证并确保该内容是可信任的,并获得相关权限和授权。
  6. 定期更新和维护:
    定期更新和维护使用的iframe相关的库和框架,以修复已知的安全漏洞和问题。

window.opener 安全问题

window.opener 表示打开当前窗体页面的的父窗体的是谁。例如,在 A 页面中,通过一个带有 target=“_blank” 的 a 标签打开了一个新的页面 B,那么在 B 页面里,window.opener 的值为 A 页面的 window 对象。

一般来说,打开同源(域名相同)的页面,不会有什么问题。但对于跨域的外部链接来说,存在一个被钓鱼的风险。比如你正在浏览购物网站,从当前网页打开了某个外部链接,在打开的外部页面,可以通过 window.opener.location 改写来源站点的地址。利用这一点,将来源站点改写到钓鱼站点页面上,例如跳转到伪造的高仿购物页面,当再回到购物页面的时候,是很难发现购物网站的地址已经被修改了的,这个时候你的账号就存在被钓鱼的可能了。

预防策略:

设置 rel 属性
<a href="https://xxxx" rel="noopener noreferrer"> 外链 <a>
// rel=noopener 规定禁止新页面传递源页面的地址,通过设置了此属性的链接打开的页面,其 window.opener 的值为 null。

将外链替换为内部的跳转连接服务,跳转时先跳到内部地址,再由服务器 redirect 到外链。
可以由 widow.open 打开外链。

文件上传漏洞

服务器未校验上传的文件,致使黑客可以上传恶意脚本等方式。
预防:
用文件头来检测文件类型,使用白名单过滤(有些文件可以从其中一部分执行,只检查文件头无效);
上传后将文件彻底重命名并移动到不可执行的目录下;

xss详情可以看前端基础1的80

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值