警惕javascript代码中的“</script>”!
之前在写《博客园自定义博客侧边栏公告的过滤漏洞》的时候遇到了一个javascript代码报错“语法错误”的问题,一直不得以解决,感谢Arliang发现了并为我进行了耐心的解释,现整理如下:
javascript代码中只要出现了“</script>”,无论是在引号中还是在注释中都会被认为是script标签的结束,例如:
示例1:
<script>
alert("aaa");
//</script>
alert("bbb");
</script>
以上代码中第2行会被成功执行,但是遇到第3行的“</script>”的时候,script标签就会被结束,所以第4行无法执行,只能被作为普通的HTML文档原样显示出来。第5行的“</script>”成为了无用代码。上面的代码完全等价于:
<script>
alert("aaa");
</script> alert("bbb");
示例2:
<script>
/*
alert("aaa");
</script>
*/
alert("bbb");
</script>
这段代码和示例1如出一辙,第3行代码因为在注释块中所以不会执行,当遇到第4行中的“</script>”的时候script标签即被结束,于是第5、6行就被当成HTML文档原样显示,第7行成了无用代码。以上代码完全等价于:
<script>
</script>
*/alert("bbb");
示例3:
<script>
var str='<script>alert("aaa");</script>';
document.write(str);
</script>
这段代码中,第2行的“</script>”会被认为是结束script标签,于是给字符串变量str赋值的操作就因缺少后引号而报语法错误,而第2行最后的“';”会被当成普通HTML文档原样显示;第3行页因在script标签外而被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:
<script>
var str='<script>alert("aaa");
</script> ';document.write(str);
示例4:
<script>
alert('</script>');
alert('aaa');
</script>
一样的,第2行中的“</script>”会被当成script标签的结束,于是alert方法因为缺少后引号和右括号而被判定为语法错误,同时第2行剩下的“');”会被当成普通HTML文档原样显示;第3行因为不在script标签内,所以也会被当成普通HTML文档原样显示;第4行成为了无用代码。以上代码完全等价于:
<script>
alert('
</script> ');alert('aaa');
总结:
javascript代码中不要尝试注释“</script>”,如果不用就直接删掉,否则会导致奇怪的语法或逻辑错误;代码中如果要把“</script>”当字符串处理一定要将其分割,如
str='</'+'script>';
本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook
警惕javascript代码中的“</script>”!的更多相关文章
- asp.net mvc页面javascript代码中如何使用razor
我们需要用<text>将javascript代码包含起来,强制让razor编译器回到内容模式, 或者将javascript代码放在函数中,让razor编译器可以识别,请看下面两个例子: & ...
- 使用themeleaf页面技术时,在JavaScript代码中使用for循环报错.....
解决方法: 在for循环前加上/* <![CDATA[ */,在for循环后加/* ]]> */,这样就能正常解析了:如下 /* <![CDATA[ */ for (var i = ...
- 使用<script>标签在HTML网页中插入JavaScript代码
新朋友你在哪里(如何插入JS) 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要 ...
- Cordova插件中JavaScript代码与Java的交互细节介绍
在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"--自定义插件.意思就是如果您用Cordova打包Mobile应用时,发现您的移动应用 ...
- 《浏览器工作原理与实践》<10>作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?
在上一篇文章中我们讲到了什么是作用域,以及 ES6 是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念. ...
- 在html中添加script脚本的方法和注意事项
在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...
- 浏览器地址栏运行JavaScript代码
这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开头后跟要执行的语句.比如: javascript:alert('hello from ad ...
- Web前端开发最佳实践(10):JavaScript代码不好读,不好维护?你需要改变写代码的习惯
前言 这篇文章本应该在上一篇文章:使用更严格的JavaScript编码方式,提高代码质量之前发布,但当时觉得这篇文章太过基础,也就作罢.后来咨询了一些初级的开发者,他们觉得有必要把这篇文章也放上来.尽 ...
- 可进行JavaScript代码测试与调试的12个网站
概述:JavaScript是网站前端开发最为重要的一门编程语言,本文收集了能够在线测试与调试JavaScript代码的12个网站 1.JS Bin JS bin是一个为JavaScript和CSS爱好 ...
随机推荐
- 李洪强iOS开发之OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- spring 定时任务的 执行时间设置规则(转)
spring 定时任务的 执行时间设置规则 单纯针对时间的设置规则org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运 ...
- Android Intent个人介绍
在Android中要打开一个新的Activity, 不用说,肯定会用到Intent,Intent作为Android的四大组件之一,个人理解,Intent的作用就是用来在(其它三个不同组件)间进行通讯, ...
- 转:socket编程在windows和linux下的区别
如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...
- 24个有用的PHP类库分享
目前,PHP是用于Web开发的最流行的脚本语言.你可以在互联网上随手找到关于PHP大量资料,包括文档.教程.工具等等.PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境.为了进 ...
- Android XML使用的学习记录
1. 注释其中一段代码或是一行,可以采用<!-- -->,示例如下 <!-- <EditText android:layout_width=&quo ...
- AVL的旋转
转自http://blog.csdn.net/gabriel1026/article/details/6311339 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树 ...
- tornado中使用torndb,连接数过高的问题
问题背景 最近新的产品开发中,使用了到了Tornado和mysql数据库.但在基本框架完成之后,我在开发时候发现了一个很奇怪的现象,我在测试时,发现数据库返回不了结果,于是我在mysql中输入show ...
- The dialect was not set. Set the property hibernate.dialect
The dialect was not set. Set the property hibernate.dialect load hibernate.cfg.xml 出 ...
- struts2的@Result annotation 如何添加params
参考: http://struts.apache.org/2.0.11/docs/result-annotation.html http://jdkcn.com/entry/add-params-to ...