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
是链接显示的文本内容。
常用属性:
href
:指定链接的目标地址。target
:指定链接打开的方式,常见取值为_self
(在当前窗口打开)、_blank
(在新窗口打开)等。title
:指定链接的标题,通常浏览器会在鼠标悬停时显示。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!')
主流预防措施
-
输入验证和过滤:
- 对用户输入的内容进行严格的验证和过滤,确保只有安全的内容被允许传递到前端页面中。
- 移除或转义特殊字符,如
<
,>
,'
,"
,&
等,以防止恶意脚本注入。
-
不信任用户输入:
- 不要直接将用户输入插入到HTML标签属性中,包括
href
、src
等,避免用户控制的数据被当做代码执行。
- 不要直接将用户输入插入到HTML标签属性中,包括
-
使用CSP(内容安全策略):
- 配置合适的CSP,限制页面可以加载的资源和执行的内容,从而减少XSS攻击的风险。
-
避免使用动态JavaScript执行:
- 尽量避免在URL中使用JavaScript伪协议,如
javascript:
,而是通过其他方式加载和执行JavaScript代码。
- 尽量避免在URL中使用JavaScript伪协议,如
-
编码输出:
- 在输出用户输入时,使用适当的编码方式对内容进行转义,比如对HTML内容使用HTML编码、对URL参数使用URL编码等。
最后的最后,真诚希望我的文章能够帮助大家 !
参考文献:
《The Tangled Web: A Guide to Securing Modern Web Applications》 - 作者:Michal Zalewski