javascript - 为何能够alert(1)?
天蓬老师
天蓬老师 2017-04-11 11:41:14
[JavaScript讨论组]
<script>console.log("<!--<script>")</script><script>console.log(");/;alert(1)//-->")</script>

最近在读别人代码的时候碰到这么一句话,如上,不明白为什么会弹出‘1’,求大神解答下。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
ringa_lee

是利用html解析器进行注入,-->让解析器误认为已经结束了script

看这个的level 15解释

http://www.cnblogs.com/renzongxian/p/5617551.html

<script>标签内的代码被解析为

console.log("junk_string") < /junk_regexp/ ; alert(1) // -->

其中,junk_string:<!--<script>,junk_regexp: script><script>console.log(")


就是 原代码和
console.log("<!--<script>")</script> <script>console.log(");/;alert(1)//-->等价 (不信你直接在console输入上面代码,试下)

迷茫

代码有问题,执行不了,转义错了吧

伊谢尔伦

感谢aristotll的解答,我再总结下就是:
html5会把 <!--<script><语句--> 中的语句用js引擎去解析。
这里的 /script><script>console.log(");/ 被解析成了正则,alert后面加//是为了注释掉后面的-->防止出错

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号