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弹窗。

 

总结

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 

相关推荐

  1. XSS协议

    2024-03-27 10:26:05       19 阅读
  2. PHP协议详解

    2024-03-27 10:26:05       26 阅读
  3. PHP协议详解

    2024-03-27 10:26:05       23 阅读
  4. PHP 协议详解

    2024-03-27 10:26:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 10:26:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 10:26:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 10:26:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 10:26:05       20 阅读

热门阅读

  1. 网络入门基础

    2024-03-27 10:26:05       18 阅读
  2. 前端理论总结(js)——reduce相关应用方法

    2024-03-27 10:26:05       20 阅读
  3. Go语言base64流式编码在收尾时的一个小坑

    2024-03-27 10:26:05       17 阅读
  4. 正则表达式:深入理解与应用

    2024-03-27 10:26:05       16 阅读
  5. CentOS 7 安装 Git

    2024-03-27 10:26:05       19 阅读
  6. 11. Linux中进程控制细节

    2024-03-27 10:26:05       19 阅读
  7. 【算法】计数排序

    2024-03-27 10:26:05       17 阅读
  8. 算法打卡day18

    2024-03-27 10:26:05       18 阅读
  9. 握手和挥手

    2024-03-27 10:26:05       19 阅读