XSS伪协议

XSS伪协议简介

XSS(跨站脚本攻击)中的伪协议是指利用一些浏览器允许的特殊协议来执行恶意脚本的一种方式。常见的伪协议包括 javascript:, data:, vbscript: 等。

攻击者可以通过构造特定的URL,将恶意脚本注入到网页中,从而实现对用户的攻击。

以下我总结一些常见的伪协议及其示例:

1. javascript:

javascript: 协议是最常见的伪协议,可以直接执行JavaScript代码。

举个栗子:

<a href="javascript:alert('XSS')">

当用户点击这个链接时,会触发一个弹窗显示 "XSS"。

2. data:

data: 协议可用于将数据嵌入到URL中,常用于在图片标签中嵌入base64编码的图像数据。

举个栗子:

<imgsrc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAIklEQVR42mP8/8HAwMDwzYAJUQLLlIYLd4AAAAASUVORK5CYII=" alt="XSS">

这段代码将一张base64编码的图片嵌入到页面中。

3. vbscript:

vbscript: 协议用于执行VBScript代码。

举个栗子:

<a href="vbscript:msgbox('XSS')">

当用户点击这个链接时,在IE浏览器中会弹出一个消息框显示 "XSS"。

a标签学习

在Web开发中,<a> 标签是HTML中用于创建链接的标签。通过 <a> 标签可以实现页面内跳转、跳转到外部链接或者执行JavaScript等操作。以下是关于常用 <a> 标签的一些内容:

基本语法:

<a href="URL">Link Text</a>

  • href 属性用于指定链接的目标,可以是一个URL、页面内锚点(#id)、邮箱地址(mailto:)等。
  • Link Text 是链接显示的文本内容。

常用属性:

  1. href:指定链接的目标地址。
  2. target:指定链接打开的方式,常见取值为 _self(在当前窗口打开)、_blank(在新窗口打开)等。
  3. title:指定链接的标题,通常浏览器会在鼠标悬停时显示。
  4. rel:指定链接与当前页面之间的关系,比如 nofollow 表示不追踪链接。

示例:

外部链接:

<a href="https://www.example.com" target="_blank">Visit Example Website</a>

  • 在这个例子中,用户点击链接"Visit Example Website"后会在新窗口打开 https://www.example.com
内部链接:

<a href="#section2">Go to Section 2</a>

  • 这个链接是一个页面内的锚点链接,用户点击后会滚动到页面中id为"section2"的部分。
邮件链接:

<a href="mailto:info@example.com">Send Email</a>

  • 这个链接是发送邮件的链接,用户点击后会默认打开邮件客户端并填入收件人地址。
调用JavaScript函数:

<a href="javascript:alert('Hello')">Click me</a>

  • 这个链接是调用JavaScript函数的链接,用户点击后会触发一个JavaScript弹窗。

学习了知识以后来一道简单的CTF再好不过:欢迎来到level5

老样子直接输入<script>alert('abc')</script>试试水,发现没有成功。肯定被过滤了什么,那就Ctrl+U查看一波

script被改了,那就尝试一波a标签

payload:

"> <a href = javascript:alert(1)>

">这里注意一下闭合就好了

总结

a标签的href属性是一个常见的用户可控输入点,攻击者可以尝试利用这个属性来进行XSS攻击。

常见的XSS攻击中会利用a标签的href属性中的伪协议来执行恶意脚本,例如:

<a href="javascript:alert('XSS Attack!')">Click me</a>

当用户点击这个链接时,将执行JavaScript代码alert('XSS Attack!')

主流预防措施

  1. 输入验证和过滤:

    • 对用户输入的内容进行严格的验证和过滤,确保只有安全的内容被允许传递到前端页面中。
    • 移除或转义特殊字符,如 <, >, ', ", & 等,以防止恶意脚本注入。
  2. 不信任用户输入:

    • 不要直接将用户输入插入到HTML标签属性中,包括hrefsrc等,避免用户控制的数据被当做代码执行。
  3. 使用CSP(内容安全策略):

    • 配置合适的CSP,限制页面可以加载的资源和执行的内容,从而减少XSS攻击的风险。
  4. 避免使用动态JavaScript执行:

    • 尽量避免在URL中使用JavaScript伪协议,如 javascript:,而是通过其他方式加载和执行JavaScript代码。
  5. 编码输出:

    • 在输出用户输入时,使用适当的编码方式对内容进行转义,比如对HTML内容使用HTML编码、对URL参数使用URL编码等。

最后的最后,真诚希望我的文章能够帮助大家 !

参考文献:

《The Tangled Web: A Guide to Securing Modern Web Applications》 - 作者:Michal Zalewski

相关推荐
GIS程序媛—椰子29 分钟前
【Vue 全家桶】7、Vue UI组件库(更新中)
前端·vue.js
weixin_4426434232 分钟前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
DogEgg_00135 分钟前
前端八股文(一)HTML 持续更新中。。。
前端·html
ZL不懂前端38 分钟前
Content Security Policy (CSP)
前端·javascript·面试
木舟100942 分钟前
ffmpeg重复回听音频流,时长叠加问题
前端
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
王大锤43911 小时前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang
半桶水专家1 小时前
用go实现创建WebSocket服务器
服务器·websocket·golang
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
我血条子呢1 小时前
[Vue]防止路由重复跳转
前端·javascript·vue.js