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

相关推荐
QGC二次开发1 分钟前
Vue3 : Pinia的性质与作用
前端·javascript·vue.js·typescript·前端框架·vue
小崔爱读书3 分钟前
普元DWS - Linux下安装DWS标准版
linux·运维·服务器
云草桑12 分钟前
逆向工程 反编译 C# net core
前端·c#·反编译·逆向工程
布丁椰奶冻18 分钟前
解决使用nvm管理node版本时提示npm下载失败的问题
前端·npm·node.js
Leyla44 分钟前
【代码重构】好的重构与坏的重构
前端
影子落人间1 小时前
已解决npm ERR! request to https://registry.npm.taobao.org/@vant%2farea-data failed
前端·npm·node.js
pyliumy1 小时前
rsync 全网备份
linux·运维·服务器
世俗ˊ1 小时前
CSS入门笔记
前端·css·笔记
子非鱼9211 小时前
【前端】ES6:Set与Map
前端·javascript·es6
6230_1 小时前
git使用“保姆级”教程1——简介及配置项设置
前端·git·学习·html·web3·学习方法·改行学it