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

相关推荐
wanhengidc7 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
QQ1__8115175157 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态7 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子7 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室7 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI7 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing7 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者7 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册7 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
有谁看见我的剑了?7 小时前
linux 添加硬盘后系统识别不到硬盘处理
linux·运维·服务器