`
yabo
  • 浏览: 6201 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于伪协议javascript:

阅读更多

前几天有人问我为什么点击链接后页面变成了一个只有“false”的页面,我猜想大概是滥用了javascript:伪协议吧。最终因为没让我看出事的代码,真正原因也就不得而知。不过我借此契机理清了此处疑惑,倒也算有所得了。

 

一般说来,伪协议经常被用到<a>的href属性上,例如<a href="javascript:alert('hello');">。这样,点击此链接的默认行为就是弹出一个框,而不是跳转至某页面了。此处需要注意的地方有两点:

1,返回值对浏览器行为的影响。返回undefined,停留在原页面,其它跳转至返回值。这就是为什么出现“false”页面的原因了。旧代码中能看到javascript:void(...);的写法,其实也是为了生成一个undefined的返回值,等同于在最后直接加return;。

2,this指向global变量。这不是说例子中alert里的this是global变量,而是连href属性里的this是global变量。因为此处是默认行为,不是事件,所以里面的代码的执行上下文不是触发元素。

 

伪协议还可以使用在form元素的action里,行为和使用在anchor上一样。至于其它地方可不可以使用,或者有没有什么其它细节之类的,我就觉得没有了解的必要了,毕竟这是一种已经不推荐使用的技术了,即混淆了结构又没有适当的fallback。

 

附上测试的代码,我觉得能运行的代码往往说明的能力更强。

<!DOCTYPE html>
<html>
<head>
  <title>My Test Page</title>
</head>
<body>
	<div>
		<form id="f" action="javascript:alertThis(this, 'action');" onsubmit="alertThis(this, 'submit');">
			<div><input type="submit" value="Empty form" /></div>
		</form>
		<a href="javascript:alertThis(this, 'anchor');" onclick="alertThis(this, 'click');">empty anchor</a>
	</div>
</body>
<script type="text/javascript">
var logger = typeof(console) === 'object' ? console : {};
if (!logger.log) logger.log = alert;
function alertThis() {
	logger.log("this is " + this + "\nargs[0] is " + arguments[0] + "\nargs[1] is " + arguments[1]);
}
</script>
</html>
 
0
1
分享到:
评论

相关推荐

    第八节 Javascript伪协议的XSS-01

    在Payload触发XSS漏洞中,我们可以使用javascript伪协议来触发XSS漏洞,例如javascript:alert(document.domain)就是一个Payload示例,它可以弹出一个警告框,显示当前网站的域名。 javascript伪协议可以用于触发XSS...

    JavaScript中伪协议 [removed]使用探讨

    在讨论JavaScript中的伪协议时,重点放在了“javascript:”这一特殊协议的使用方法和原理。这种伪协议允许我们将JavaScript代码直接嵌入到URL中,使得浏览器解释器能够执行这段代码,而不是请求服务器上的资源。使用...

    js-new-window-opens.zip_javascript

    opens.zip_javascript`这个压缩包文件显然关注的是如何利用JavaScript控制`&lt;a&gt;`标签来实现链接在新窗口中打开,并且涉及到如何通过正则表达式进行特定的链接地址判断,以防止某些链接(比如`javascript:`伪协议)被...

    通过伪协议解决父页面与iframe页面通信的问题

    为了解决这个问题,我们可以利用伪协议(通常是以`javascript:`开头的URL)来注入JavaScript代码。在iframe的`src`属性中,我们可以指定一个JavaScript函数,该函数在执行时会设置`document.domain`并动态生成内容。...

    javascript过滤危险脚本方法.docx

    3. **伪协议**:`javascript:`或`vbscript:`协议可以被用在`href`或`src`属性中,执行相应的脚本。 4. **CSS表达式**:在CSS中,`expression()`可以执行JavaScript代码,虽然已被废弃,但仍可能在某些旧版本的浏览器...

    记录几种XSS绕过方式1

    在某些情况下,攻击者可以通过伪协议如`javascript:`来执行JavaScript代码,如`&lt;a href="javascript:alert(1)"&gt;`或`&lt;iframe src="javascript:alert(1)"&gt;`,即使禁止了常规的JavaScript函数。 6. 编码绕过: 当...

    Javascript笔记

    4. **取消标签的默认行为**:在HTML中,可以使用`javascript:`伪协议或者`javascript:void(0)`来阻止超链接和表单提交的默认行为。例如: - `&lt;a href="javascript:;"&gt;跳转&lt;/a&gt;` - `&lt;a href="javascript:void(0)"&gt;...

    javascriptvoid(0)含义以及与”#”的区别讲解

    1.javascript:void(0)这种伪协议,少写的好,如果你看过一些web标准的书就知道为什么了。(不懂,原话摘的,暂做记录) 2.链接(href)直接使用javascript:void(0)在IE中可能会引起一些问题,比如:造成gif动画...

    JavaScript课件-01.pptx

    2. **事件处理**:JavaScript可以通过事件监听,如`onclick`,在用户交互时触发相应的函数,或者在链接中使用`javascript:`伪协议来执行JS代码。 3. **基本语法**:JavaScript是大小写敏感的,标识符规则规定首字符...

    html中a标签调用js函数.docx

    1. **JavaScript: 协议调用** 这种方法常见于老代码中,如`&lt;a href="javascript:js_method()"&gt;`, 但它有一些问题。首先,传递参数时容易出现问题,特别是当尝试传递`this`等对象时。其次,使用`javascript:`协议会...

    Javascript知识点汇总.doc

    - 超链接应用:使用javascript:伪协议进行页面跳转或执行脚本。 - 表单处理:通过事件监听获取表单数据,实现验证和提交。 - 下拉列表框:使用和标签创建,通过value属性获取选中项。 - 多行文本框:元素,可...

    第十一节 绕过替换script和on事件的XSS-01

    例如,使用“javascript:”伪协议来执行恶意脚本。例如, Payload: “&gt; ”javascript:alert(document.domain)”&gt;xss”,这个Payload将执行恶意脚本,弹出警告框,显示当前域名。 四、空格绕过 空格绕过是一种常见...

    JavaScript常用50例

    7. 阻止网页被另存为:使用 `noscript` 标签配合 `javascript:`伪协议,可以尝试阻止用户将网页保存为本地文件,但这种方法并不是完全有效,因为用户还可以通过其他方式获取网页内容。 8. 查看源代码按钮:通过创建...

    Javascript的运用与提高.pdf

    SOLUTION:可以使用 JavaScript 伪协议、内嵌事件处理函数或平稳退化来实现。例如,使用 `&lt;a href='javascript:popUp('http://www.myexample.com');return false;'&gt;My Example&lt;/a&gt;` 或 `(this.href);return false;'...

    11浅析浏览器解析过程1

    当HTML解析器遇到`&lt;script&gt;`标签或带有`javascript:`伪协议的`&lt;a&gt;`、`&lt;img&gt;`等标签时,它会切换到JavaScript解析模式。例如,在`&lt;a href='javascript:alert("&lt;\u4e00&gt;")'&gt;test&lt;/a&gt;`中,JavaScript解析器会对`...

    Javascript-绝对简明手册.pdf

    - **方法二**:通过伪协议链接调用脚本。 ```html &lt;a href="javascript:void window.open();"&gt;Open ``` - **方法三**:引用外部JavaScript文件。 ```html &lt;script language="javascript" src="/js/dialog.js"&gt; ...

    javascript知识点汇总.doc

    2. 放在超链接或表单的重定向中,通过`javascript:`伪协议执行。 3. 在特定事件(如onclick)中调用函数。 4. 引入外部的.js文件,以分离结构和行为。 注释方面,JavaScript提供了两种形式: 1. 为了兼容旧版浏览器...

    a标签中调用js中的方法的方法

    - 使用`javascript:`协议可能会触发`window.onbeforeunload`事件,导致用户体验不佳。 - IE浏览器中可能导致GIF动画停止播放。 - 不符合W3C标准,浏览器状态栏会暴露JavaScript方法名,安全性较低。 2. **`...

Global site tag (gtag.js) - Google Analytics