JavaScript注入技术详解:原理、操作与局限性

作者:缓存笔记

时间:2026-10-30

浏览:448

本文详细介绍JavaScript注入技术,即在浏览器地址栏输入javascript:协议代码以修改页面内容的方法。文章通过示例演示如何更改图片源、表单属性及变量值,并解释了基于索引访问无命名元素的操作逻辑。同时指出所有修改仅作用于客户端,刷新后失效,但可用于绕过简单的前端验证或Cookie欺骗。

文章目录

JavaScript注入技术详解:原理、操作与局限性

什么是javascript注入攻击?

JavaScript注入的基本原理与语法

JavaScript注入是指在浏览器地址栏中直接输入JavaScript代码,从而修改页面上的JavaScript变量或标签内容。这种技术允许用户无需关闭或保存网页即可实时更改页面显示,所有操作均在浏览器地址栏中完成。其基本语法格式为: javascript:alert(#command#)

基础示例:触发警告框

例如,若希望在http://www.example.com站点上触发一个警告框,首先需加载该URL对应的页面,待加载完成后清空地址栏并输入: javascript:alert("Hello World")

修改页面元素:图片与变量

作为新的URL执行,这将弹出一个包含“Hello World”的警告框。利用此技术几乎可以修改网页的任何元素,包括图片。假设页面Logo图片对应的HTML代码片段如下: <IMG Name="hi" SRC="hello.gif">

该图片名为“hi”,源文件为“hello.gif”。若希望将其替换为我站(http://www.mysite.com)上的“bye.jpeg”文件,需构造完整的URL为http://www.mysite.com/bye.jpeg。通过JavaScript注入,只需在地址栏输入: javascript:alert(document.hi.src="http://www.mysite.com/bye.jpeg") 此时会弹出显示新URL的警告框,随后图片即被替换。需要注意的是,此类更改仅具临时性!若刷新页面或重新访问,更改将消失,因为修改仅发生在本地客户端,并未同步至网页服务器。 采用相同方法可查看或修改变量值。例如页面源码中包含如下代码:


<SCRIPT LANGUAGE="JavaScript"> 
var a="test" 
</SCRIPT>  

修改表单属性与层级结构解析

表示变量a的值为“test”。此时在地址栏输入: javascript:alert(a) 即可查看其值,随后通过以下方式将其修改为“hello”: javascript:alert(a="hello") JavaScript注入常用于修改表单属性。假设存在如下代码:


<form name="format" action="send.php" method="post"> 
<input type="hidden" name="mail" value="someone@somewhere.com"> 
<input type="text" name="name"> 
<input type="submit" value="submit"></form> 

若希望将表单提交目标邮箱从someone@somewhere.com更改为me@hacker.com,可使用以下命令: javascript:alert(document.format.mail.value="me@hacker.com") 观察上述命令可发现其层级结构:

按从左至右顺序解析如下: 1) 起始部分为document 2) 接着是目标对象名(如document.hi.src)或其包含的对象(如document.format.mail.value) 3) 最后是目标属性(如源路径:document.hi.src,或变量值:document.format.mail.value) 4) 各层级之间使用“.”号分隔 5) 修改属性值时使用“=”号及新属性值 *注释:当新属性值为字符串时(如:document.format.mail.value="me@hacker.com")需用双引号包裹。 若新值为变量,则无需双引号。例如将变量b的值赋给变量a,可输入javascript:alert(a=b)。

处理无命名元素:基于索引的访问

然而,页面中多数标签并无name属性,例如:


<form action="send.php" method="post"> 
<input type="hidden" name="mail" value="someone@somewhere.com"> 
<input type="text" name="name"> 
<input type="submit" value="submit"></form> 

该代码段未定义表单名。结合前述信息,可使用如下命令: javascript:alert(document. .mail.value="me@hacker.com") 在此情况下,需统计并确定表单的序号。示例如下:


<form action="send.php" method="post"> 
<input type="text" name="name"> 
<input type="submit" value="submit"> 
</form> 
 
<form action="send.php" method="post"> 
<input type="hidden" name="mail" value="someone@somewhere.com"> 
<input type="text" name="name"> 
<input type="submit" value="submit"> 
</form> 
 
<form action="send.php" method="post"> 
<input type="text" name="name"> 
<input type="submit" value="submit"> 
</form> 

高级应用:Cookie编辑与安全绕过

在以上代码中我们看见了3个表单,但我们只对第二个感兴趣,因此我们想要的表单序号就是2。不要忘记我们是从1开始计算的,比如1,2,3,4...而javascript却从0开始计算,比如0,1,2,3...所以真正的表单序号是1,不是2,通常我们要把找到的表单序号减一。我们将用这个序号来补全我们的命令: javascript:alert(document.forms[1].mail.value="me@hacker.com") 这样你就可以更改没有名字的图片或链接了,你可以把“forms”换成任何你想要的标签类型。对于图片就是 javascript:alert(document.images[3].src="#the url of the picture you want#") 对于链接就是 javascript:alert(document.links[0].href="#the url you want#") 最后,我们可以用这个技巧来编辑cookies。下面的命令由triviasecurity.net的Dr_aMado编写,我只修改了一点点,让它在用户编辑之前显示出来。你只要把它们复制到地址栏就可以了:


javascript:alert(window.c=function a(n,v,nv){c=document.cookie;c=c.substring(c.indexOf(n)+n.length,c.length); 
c=c.substring(1,( (c.indexOf(";")>-1) ? c.indexOf(";") : c.length));nc=unescape(c).replace(v,nv); 
document.cookie=n+"="+escape(nc);return unescape(document.cookie);}); 
alert('The cookie is: "'+document.cookie+'"');alert(c(prompt("The name of the cookie:",""), 
prompt("Change this value:",""),prompt("with this:",""))) 

//若需手动更改Cookie,可使用以下命令: javascript:alert(document.cookie) 此命令将显示当前Cookie,假设结果为“userid=1”。若希望将其修改为“userid=2”,可使用以下命令: javascript:alert(document.cookie="userid=2") 最后必须强调,所有更改均仅在客户端生效!这类似于将网页保存至本地PC后进行修改。尽管如此,利用此技巧仍可欺骗页面(如Cookie)或绕过安全验证。例如,某些网页会检测数据发送来源,若从http://www.test.com/form.php提交数据至http://www.test.com/check.php,check.php可能校验数据是否源自http://www.test.com/form.php上的表单。此外,若计划在页面中注入自定义JavaScript代码,利用此类技巧可确保图片等元素修改后保持不变!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章