文本溢出截取和xss攻击

本文深入解析了XSS攻击的两种主要类型——存储型和反射型,以及window.opener的安全问题。详细介绍了每种攻击的工作原理和实际案例,并提供了有效的防御策略,包括设置rel属性、使用内部跳转服务和文本溢出截断技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XSS,跨站脚本攻击

存储型 XSS 攻击

利用漏洞提交恶意 JavaScript 代码,比如在input, textarea等所有可能输入文本信息的区域,输入<script src="http://恶意网站"></script>等,提交后信息会存在服务器中,当用户再次打开网站请求到相应的数据,打开页面,恶意脚本就会将用户的 Cookie 信息等数据上传到黑客服务器。

反射型 XSS 攻击

用户将一段含有恶意代码的请求提交给 Web 服务器,Web 服务器接收到请求时,又将恶意代码反射给了浏览器端,这就是反射型 XSS 攻击。 在现实生活中,黑客经常会通过 QQ 群或者邮件等渠道诱导用户去点击这些恶意链接,所以对于一些链接我们一定要慎之又慎。

Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方。

window.opener 安全问题

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

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

预防策略:

  1. 设置 rel 属性
<a href="https://xxxx" rel="noopener noreferrer"> 外链 <a>
复制代码

rel=noopener 规定禁止新页面传递源页面的地址,通过设置了此属性的链接打开的页面,其 window.opener 的值为 null。 2. 将外链替换为内部的跳转连接服务,跳转时先跳到内部地址,再由服务器 redirect 到外链。 3. 可以由 widow.open 打开外链。

文本溢出截断

单行文本溢出
overflow: hidden; // 超出隐藏
white-space: nowrap; // 只在一行显示,不能换行
text-overflow: ellipsis; //溢出时显示省略号
优点
  • 无兼容问题
  • 响应式截断
  • 文本溢出才显示省略号 ,否则不显示
  • 省略号位置显示刚好
缺点
  • 只支持单行文本截断
多行文本溢出
-webkit-line-clamp: 2;  //用来限制在一个块元素显示的文本的行数,2表示最多显示2行,需要结合其他的webkit属性
dispaly: -webkit-box;  //将对象作为弹性伸缩盒子模型显示
-webkit-box-orient: vertical; //设置或检索伸缩盒子的子元素的排列方式
text-overflow: ellipsis; 
优点
  • 响应式截断
  • 文本溢出才显示省略号
缺点
  • 兼容性一般: -webkit-line-clamp 属性只有webkit内核的浏览器才支持
### 如何在 JavaScript 富文本编辑器中防止 XSS 攻击 #### 使用安全库过滤输入内容 为了有效防范跨站脚本攻击 (XSS),可以采用专门的安全库来处理用户提交的内容。例如,在项目中引入 `xss` 库并将其挂载到全局对象上以便于访问[^1]: ```javascript import Xss from 'xss'; Vue.prototype.Xss = Xss; ``` 通过这种方式,可以在保存或展示富文本数据之前对其进行清理。 #### 利用成熟的富文本编辑组件自带防护机制 一些流行的富文本编辑工具已经内置了针对 XSS 的保护措施,并持续得到改进支持。比如 UEditor 就是一个例子,该编辑器不仅易于集成还特别关注修复可能存在的 XSS 漏洞问题[^2]。 对于其他类型的编辑器如 KindEditor,则可以通过加载特定配置文件以及初始化设置增强安全性[^3]: ```html <script charset="utf-8" src="/editor/kindeditor.js"></script> <script charset="utf-8" src="/editor/lang/zh-CN.js"></script> <script> KindEditor.ready(function(K) { window.editor = K.create('#editor_id', { filterMode : true, htmlTags : {...}, // 自定义标签白名单 allowedProtocols: ['http','https'],// 允许协议列表 afterBlur:function(){this.sync();} // 处理失去焦点事件同步内容 }); }); </script> ``` #### 正则表达式匹配危险模式 当涉及到更复杂的场景时,还可以编写正则表达式来识别移除潜在有害代码片段。下面给出了一种用于 PHP 中检测恶意链接属性值的方式作为参考[^4];当然也可以根据实际需求调整为适合前端使用的版本: ```javascript const pattern = /\s*(href|src)\s*=\s*("[\s]*?(?:javascript|vbscript):[^"]+"|'[\s]*?(?:javascript|vbscript):[^']*'|(?:javascript|vbscript):[^\s]+)/i; function sanitizeHtml(htmlString){ return htmlString.replace(pattern,''); } ``` 此函数会遍历传入字符串中的所有 HTML 属性,并删除任何尝试执行 JavaScript 或 VBScript 脚本的地方。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值