如何向网页如何在页面注入js脚本本

2017年10月 Web 开发大版内专家分月排行榜第二2017年9月 Web 开发大版内专家分月排行榜第二2017年8月 Web 开发大版内专家分月排行榜第二2017年7月 Web 开发大版内专家分月排行榜第二2017年5月 Web 开发大版内专家分月排行榜第二2017年4月 Web 开发大版内专家分月排行榜第二2017年3月 Web 开发大版内专家分月排行榜第二2017年1月 Web 开发大版内专家分月排行榜第二2016年11月 Web 开发大版内专家分月排行榜第二2016年9月 Web 开发大版内专家分月排行榜第二2016年8月 Web 开发大版内专家分月排行榜第二2016年7月 Web 开发大版内专家分月排行榜第二2016年6月 Web 开发大版内专家分月排行榜第二2016年5月 Web 开发大版内专家分月排行榜第二2016年4月 Web 开发大版内专家分月排行榜第二2016年2月 Web 开发大版内专家分月排行榜第二2015年9月 Web 开发大版内专家分月排行榜第二2015年7月 Web 开发大版内专家分月排行榜第二2015年6月 Web 开发大版内专家分月排行榜第二2015年4月 Web 开发大版内专家分月排行榜第二2015年3月 Web 开发大版内专家分月排行榜第二2015年2月 Web 开发大版内专家分月排行榜第二
2016年12月 Web 开发大版内专家分月排行榜第三2016年10月 Web 开发大版内专家分月排行榜第三2016年1月 Web 开发大版内专家分月排行榜第三2015年12月 Web 开发大版内专家分月排行榜第三2015年11月 Web 开发大版内专家分月排行榜第三2015年10月 Web 开发大版内专家分月排行榜第三2015年5月 Web 开发大版内专家分月排行榜第三2015年1月 Web 开发大版内专家分月排行榜第三2014年12月 Web 开发大版内专家分月排行榜第三
2013年10月 Web 开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。博客分类:
1、JavaScript注入就是在浏览器地址栏中输入一段js代码,用来改变页面js变量、页面标签的内容。
使用Javascript注入,用户不需要关闭或保存网页就可以改变其内容,这是在浏览器的地址栏上完成的。命令的语法如下:
javascript:alert(#command#)
例如,如果你想在站点上看到一个alert警告框,那么首先在地址栏上输入URL并等待页面加载完成,然后删掉URL并输入:
javascript:alert("Hello World")
作为新的URL。这将弹出一个“Hello World”警告框,使用这一技术几乎可以改变网页的任何内容,例如一张图片。假设有一张网站logo图片,我们通过查看页面源文件找到其中一段HTML代码:
&IMG Name="hi" SRC="hello.gif"&
图片被命名为“hi”,源文件是“hello.gif”,我们想要把它改成存储在我们站点()上的
“bye.jpeg”文件,因此图片完整的URL地址是/bye.jpeg,使用Javascript注入,
我们只需要在地址栏上输入:
javascript:alert(document.hi.src="/bye.jpeg")
你将会看到弹出“/bye.jpeg”alert警告,然后图片就被更改了。需要注意的是,这些更改只是暂时的!如果你刷新页面或者重新进入,你的更改将会消失,因为你只是在你的PC作了这些更改,而不是在网页服务器上。
使用同样的方法我们可以查看或更改变量的值,例如我们在网页上找到一段这样的代码:
&SCRIPT LANGUAGE="JavaScript"&
var a="test"
意思是变量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=""&
&input type="text" name="name"&
&input type="submit" value="submit"&&/form&
我们想让表单发送到我们的邮箱,而不是。可以使用如下命令:
javascript:alert(document.format.mail.value="")
也许你已经注意到了这些命令的层次关系:
我们按照从左到右的顺序依次说明:
1)最左边是document
2)然后是我们想要更改的对象名(比如document.hi.src)或其包含的对象(比如document.format.mail.value)
3)最后是我们想要更改的属性(比如源路径:document.hi.src,或变量值:document.format.mail.value)
4)使用“.”号分隔
5)当我们想要更改属性值的时候,我们使用“=”号和新的属性值
*注释:当新的属性值为字符串时(比如:document.format.mail.value="")需要用双引号把它括起来。
如果我们想要把它作为一个变量的值,则不需要使用双引号""。例如我们想要将变量b的值赋予变量a,我们可以输入javascript:alert(a=b)。
但是,页面中的大部分标签都没有名字,比如:
&form action="send.php" method="post"&
&input type="hidden" name="mail" value=""&
&input type="text" name="name"&
&input type="submit" value="submit"&&/form&
在这段代码中没有表单名,综合上面这些信息,可以使用此命令:
javascript:alert(document. .mail.value="")
在这种情况下我们必须统计并找出表单序号,下面是一个例子:
&form action="send.php" method="post"&
&input type="text" name="name"&
&input type="submit" value="submit"&
&form action="send.php" method="post"&
&input type="hidden" name="mail" value=""&
&input type="text" name="name"&
&input type="submit" value="submit"&
&form action="send.php" method="post"&
&input type="text" name="name"&
&input type="submit" value="submit"&
在以上代码中我们看见了3个表单,但我们只对第二个感兴趣,因此我们想要的表单序号就是2。不要忘记我们是从1开始计算的,比如1,2,3,4...而javascript却从0开始计算,比如0,1,2,3...所以真正的表单序号是1,不是2,通常我们要把找到的表单序号减一。我们将用这个序号来补全我们的命令:
javascript:alert(document.forms[1].mail.value="")
这样你就可以更改没有名字的图片或链接了,你可以把“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.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上然后修改它。尽管如此,使用这一技巧你仍然可以欺骗页面(例如cookies)或绕过安全验证。例如一些网页会检测用户发送数据的位置,如果从/form.php
发送数据到/check.php,check.php可能会检测数据是否来自http:
///form.php上的表单。除此之外,如果你打算在页面中输入你自己的JavaScript代码,通过使用一些这样的技巧,你将能够更改图片并保持不变!
浏览 26861
浏览: 252358 次
来自: 北京
讲的很透彻,受教了 。
最近在研究这方面,很不错,但是多线程并发的时候可能会出问题,而 ...
厉害啊 我的哥
没看懂,是指直接在URL后面加个
javascript:al ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'各种浏览器开启JavaScript脚本方法
各种浏览器开启JavaScript脚本方法
随着网站设计技术的发展,为了用户友好体验,大部分网站使用了JavaScript脚本设计,如果您的浏览器禁用或关闭的JavaScript支持,那么可能造成网站体验差或网站部分功能无法使用。
&& 下面提供10种浏览器如何开启JavaScript的方法。请先选择您试用的什么浏览器。
&& 1、IE浏览器开启JavaScript方法:
在IE界面菜单栏中“工具”中选择“Internet选项”–“安全”选项卡–选择“Internet”(蓝色的小地球)–“自定义级别”–找到“脚本”下的“Java小程序脚本”中进行启用。如下图所示,设置完成后,重新打开浏览器设置即可生效。
&& 2、360浏览器开启JavaScript方法:
在360界面菜单栏的“工具”中选择“360安全浏览器选项”–“网页设置”选项–在网页设置选项中取消“不支持Java小程序”。如下图所示,设置完成后,重新打开浏览器设置即可生效。
&& 3、腾讯TT浏览器开启JavaScript方法:
&& 打开TT浏览器,点击右上方的“菜单” - 选择“工具” -
选择“TT选项”,在打开的设置界面中选择“智能屏蔽”,在智能屏蔽设置页面中将“禁止运行Java程序”取消,点击保存,重新启动浏览器设置即可生效。
&& 4、搜狗浏览器开启JavaScript方法:
&& 目前,搜狗开启JavaScript方法继承于IE浏览器,
&& 5、火狐浏览器开启JavaScript方法:
打开火狐浏览器界面,在菜单栏中选择“工具”–“选项”–“内容”中可见到“启用JavaScript”的选项,重新启动浏览器即可。
&& 6、Opera浏览器开启JavaScript方法:
打开Opera浏览器,在菜单栏中选择“工具”–“首选项”–“高级”选项卡–“内容”中的“允许使用JavaScript”可以设置,重新启动浏览器即可。
&& 7、Safari浏览器开启JavaScript方法:
以Beta4英文版为准,在“Preferences”–“Security”选项卡中的“Enable
JavaScript”,勾选上则是打开,反之是禁用,重新启动浏览器即可。
&& 8、谷歌浏览器开启JavaScript方法:
&& 打开谷歌浏览器,点击右上方扳手样式的图片 - 选择“选项” -& 选择“高级选项”
-& 选项“内容设置” -& 选择“JavaScript” -
选择“运行所有网站运行JavaScript(推荐)”,设置完成重新打开浏览器即可。
&& 9、世界之窗浏览器开启JavaScript方法:
&& 打开世界之窗浏览器,在上方菜单栏中点击“工具”
-& 选择“选项” -& 在打开的设置页面选择“页面设置”
-& 页面内容中选择将“不执行Java小程序”取消,即可完成设置,重新启动浏览器即可。
&& 10、Avant浏览器开启JavaScript方法:
&& 1、打开Avant浏览器,在菜单栏点击右上方选择“工具” -
将“禁止运行Java小程序”前对勾取消。
&& 2、打开Avant浏览器,在菜单栏点击右上方选择“工具” -
选择“Avant Browser选项” -& 选择“浏览选项” -&
将“禁止运行Java小程序”前对勾取消即可完成设置,重新启动浏览器即可。string script = @&&script type='text/javascript'&
function confirmSubmit(){
var msg = 'Are you sure you want to submit this data?';
return confirm(msg);
&/script&&;
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), &Confirm&, script);
form1.Attributes.Add(&onsubmit&, &return confirmSubmit();&);
       本示例并没有从 RegisterClientScriptBlock() 方法中受益。但是,使用 js 创建一个自定义控件时,ClientScriptMananger 方法就非常重要了!
脚本注入攻击
       开发人员并非不能意识到页面中的安全问题,只是因为很多常见的危险(包括 脚本注入 和 SQL注入)会在不经意间发生。
       一个常施加于网页的攻击是脚本注入攻击。用户提交恶意标签或脚本代码(一般通过 TextBox 控件之类的简单控件),然后呈现到 HTML 页面,这时就会发生脚本注入攻击。如果用户提供的数据被保存到数据库并插入到其他用户使用的页面,攻击可以影响网站所有用户的操作。
       脚本注入攻击的基本技术是客户端提交嵌入了脚本标签的内容。这些脚本标签可以包括 &script&、&object&、&applet& 和&embed&。虽然应用程序可以具体检查这些标签并用 HTML 编码来使用无害的 HTML 实体代替这些标签,但是通常不会执行基本验证。
       脚本注入攻击是所有 Web 开发人员都关注的,无论他们使用的是 ASP.NET、ASP 还是其他 Web 开发技术。ASP.NET 包含一个设计用于自动防止脚本注入攻击的功能,叫做请求验证。它检查回传的表单输入,如果发现潜在的恶意标签(如 &script&),就报告一个错误。实际上,请求验证禁止所有非数值的标签,包括 HTML 标签( 如&b& 或 &img&等)和不正确的标签(如&abcd&)。
       创建一个页面可测试请求验证功能:
       现在尝试提交的话,如果是本地运行代码,可以看到下面的错误详细信息(远程只会看见一般的错误页面):
禁用请求验证
       当然,有时,请求验证规则有点太严格了。例如,有的程序确实需要用户输入 HTML 标签或者 XML 数据块。例如用户要提交一个拍卖列表或者销售广告的格式化 HTML 块的 Web 应用。
&#160;&#160;&#160;&#160;&#160;&#160; 这些情况下,你可以 <font color="# 步禁用请求验证:
&#160;&#160;&#160;&#160;&#160;&#160; 首先,设置 Page 指令,不过这还不能立刻带来变化。因为 ASP.NET 4 改变了请求验证的工作方式。现在它在页面处理生命周期之前被应用。
&%@ Page ValidateRequest=&false& ... %&
&#160;&#160;&#160;&#160;&#160;&#160; 其次,配置 web.config 文件,告诉 ASP.NET 4 恢复以前版本的验证行为:
&system.web&
&httpRuntime requestValidationMode=&2.0&/&
&/system.web&
&#160;&#160;&#160;&#160;&#160;&#160; 现在,想象一下如果使用这段代码在标签里显示用户提供的值会发生什么:
protected void Button1_Click(object sender, EventArgs e)
lblInfo.Text = &You entered: & + txtInput.T
&#160;&#160;&#160;&#160;&#160;&#160; 也可以修改 web.config 文件来禁用整个 Web 应用程序的请求验证。设置或增加 &pages& 元素的 validateRequest 属性:
&system.web&
&pages validateRequest=&false&&
&httpRuntime requestValidationMode=&2.0&/&
&/system.web&
&#160;&#160;&#160;&#160;&#160;&#160; 脚本注入攻击中的脚本总是在客户端执行。但是,这并不意味着它仅仅限于单一用户!大多情况下,用户提供的数据被保存到一个数据库之类的地方,并且能够被其他用户浏览。例如,一个用户把脚本块作为业务名称加入业务注册表,其他请求完整业务注册表的用户就会受到影响。
&#160;&#160;&#160;&#160;&#160;&#160; 在请求验证被关闭的情况下,为了阻止脚本注入攻击的发生,你需要在显示内容前使用 Server 对象显式地编码要显示的内容:
protected void Button1_Click(object sender, EventArgs e)
lblInfo.Text = &You entered: & + Server.HtmlEncode(txtInput.Text);
扩展请求验证
&#160;&#160;&#160;&#160;&#160;&#160; 对于绝大部分 Web 应用程序,ASP.NET 请求验证能够很好的满足其验证需要。但是在某些情况下,你可能需要选择让一些通常会被拒绝的值通过验证,或者要增加其他要被禁止的值,此时,需要通过自定义代码来扩展请求验证系统。(如果面临完全禁用请求验证和通过代码增加例外的两难选择,通常增加例外是更好的选择!否则,你的程序对各种脚本攻击或其他损害毫无招架之力)。
&#160;&#160;&#160;&#160;&#160;&#160; 为了扩展请求验证系统,需要派生 System.Web.Util.RequestValidator 类并重写 IsValidRequestString() 方法:
public class CustomRequestValidator : System.Web.Util.RequestValidator
protected override bool IsValidRequestString(HttpContext context,
string value, RequestValidationSource requestValidationSource,
string collectionKey, out int validationFailureIndex)
&#160;&#160;&#160;&#160;&#160;&#160; IsValidRequestString() 方法接受 5 个参数:
context 。请求的 HttpContext,通过它可以访问内置的 ASP.NET 对象,如 Request、Response、Application、Server、Session 和 Cache。
value 。它是要进行验证的字符串文本
requestValidationSource 。它使用枚举 RequestValidationSource 来标识要验证的信息类型。可能的值包括 Cookies、File、Form、Headers、Path 和 QueryString。
collectionKey 。如果数据源来自某个集合,collectionKey 返回用于索引值的键值。例如,对于表单数据,collectionKey 和回发值的输入控件相对应。
validationFailureIndex 。如果验证执行成功,validationFailureIndex 应该设置为 0 并且 IsValidRequestString() 返回 true。如果验证失败,IsValidRequestString() 方法返回 false,而 validationFailureIndex 指向字符串中非法数据开始的位置。
&#160;&#160;&#160;&#160;&#160;&#160; 通过这些信息,可以很方便的创建改变 ASP.NET 内置行为的应急的验证方法。
&#160;&#160;&#160;&#160;&#160;&#160; 下面的示例里,验证器检查是否在进行表单验证。如果不是,验证器触发默认的实现。如果是,则搜索回发输入中的 &script& 标记。如果包含就拒绝该值,但同时接收其他合法的值,这使它的验证行为要比 ASP.NET 默认验证更为宽松:
public class CustomRequestValidator : System.Web.Util.RequestValidator
protected override bool IsValidRequestString(HttpContext context,
string value, RequestValidationSource requestValidationSource,
string collectionKey, out int validationFailureIndex)
if (requestValidationSource == RequestValidationSource.Form)
int errorIndex = value.ToLower().IndexOf(&&script&&);
if (errorIndex != -1)
validationFailureIndex = errorI
return false;
validationFailureIndex = 0;
return true;
return base.IsValidRequestString(context, value,
requestValidationSource, collectionKey, out validationFailureIndex);
&#160;&#160;&#160;&#160;&#160;&#160; 需要在 web.config 文件中注册它才能使用:
&system.web&
&httpRuntime requestValidationType=&CustomRequestValidator&/&
&/system.web&
&#160;&#160;&#160;&#160;&#160;&#160; 这个示例只是简单演示了自定义验证是如何工作的。但是,对于如何学会通过自定义代码加入或多或少的验证已经足够了。
&#160;&#160;&#160;&#160;&#160;&#160; 如果要增强标准 ASP.NET 验证,最好把你的实现添加到默认的实现链里。验证值通过你的检查后,可以继续调用基类的 IsValidRequestString() 来执行额外的内置检查。

我要回帖

更多关于 网页注入js代码 的文章

 

随机推荐