不仅仅是javascript这种解释型的语言会有这种问题,其他的解释类型的语言也或多或少有这样的需求。 就是在常规的语句流程中避开关键字的使用。
举个栗子先
<!doctype>
<html>
<head>
<title>test</title>
</head>
<body>
<h2>test</h2>
<script type="text/javascript">
alert('</script>');
</script>
</body>
</html>
这个例子比较极端了,但是很好说明问题,就是说,当某些语言读到关键字出现的时候,就停止工作了,而不是像我们想要的结果一样。 比如,跳出个对话框,说“” 那么如何解决呢. 第一种方法,拼合关键字
<!doctype>
<html>
<head>
<title>test</title>
</head>
<body>
<h2>test</h2>
<script type="text/javascript">
alert('</scr'+'ipt>');
</script>
</body>
</html>
将关键词这个完整的词汇分割成无意义的字符字串,你可以在这里继续发挥,比如转义字符,或者2次转换字符串。 悄悄的说一下,其实这和某些木马所谓的加花,混淆是一致的。。。 接着说第二种方法,就是调用外部数据保存。
<!doctype>
<html>
<head>
<title>test</title>
</head>
<body>
<h2>test</h2>
<input type="text" value="</script>" />
<script type="text/javascript">
alert (document.getElementsByTagName('input')[0].value);
</script>
</body>
</html>
使用默认的控件来保存我们需要的内容也是个不错的方法,因为控件内的数据保存类型有默认类型,比如input,我设置为text, 那么取到的数据就是字符串,这么一来也就没问题了。 如果你说这种你觉得木有含量,那么延伸下吧。 自定义附加数据来做,当然同理使用json,xml,或者其他方式的交互数据也是一样。
<!doctype>
<html>
<head>
<title>test</title>
</head>
<body>
<h2>test</h2>
<span mydata="</script>"></span>
<script type="text/javascript">
alert(document.getElementsByTagName('span')[0].getAttribute("mydata"));
</script>
</body>
</html>
先写到这里吧。