为什么 javascript 不在这里显示警报?
why does javascript not show an alert here?
我正在尝试从 Portswigger 学习 XSS,在它的实验室中 https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-double-quotes-encoded-single-quotes-escaped,我的方法产生了以下 javascript 代码。
<script>
var searchTerms = '\';
alert(1);
\'';
</script>
问题是这段代码向我显示了一个错误。但是既然Javascript是解释型语言,不是应该先显示alert再显示error吗?
<script>
var searchTerms = '\';
alert(1);
whatever;
</script>
就像上面的代码片段一样,也是错误的。在这里我也得到一个错误,但也显示了警报。那么为什么不是第一种情况呢?
您在第一个代码中生成的是 Syntax Error。这些错误发生在 JavaScript 引擎解析脚本并遇到语法无效代码时。如果 JavaScript 文件包含语法错误,将执行文件中的 none 代码。
在你的第二个代码中,你没有语法错误,而是语义错误,这就是为什么你的第二个脚本会显示警报。
脚本未按预期运行的原因是您假设 javascript 只会查看一行,执行它,然后继续下一行。
然而,javascript实际上事先查看了整个文件。例如,它可以调用一个尚未声明但在文件下方声明的函数:
showAlert();
function showAlert() {
alert("javascript is not executed line by line");
}
如果javascript只是逐行遍历文件,第一次遇到showAlert()
是不会知道
的意思的。
如果发现语法错误,代码将不会 运行。请注意,您的第二个示例是不同的,因为它实际上没有语法错误——只是未知的 whatever
.
我正在尝试从 Portswigger 学习 XSS,在它的实验室中 https://portswigger.net/web-security/cross-site-scripting/contexts/lab-javascript-string-angle-brackets-double-quotes-encoded-single-quotes-escaped,我的方法产生了以下 javascript 代码。
<script>
var searchTerms = '\';
alert(1);
\'';
</script>
问题是这段代码向我显示了一个错误。但是既然Javascript是解释型语言,不是应该先显示alert再显示error吗?
<script>
var searchTerms = '\';
alert(1);
whatever;
</script>
就像上面的代码片段一样,也是错误的。在这里我也得到一个错误,但也显示了警报。那么为什么不是第一种情况呢?
您在第一个代码中生成的是 Syntax Error。这些错误发生在 JavaScript 引擎解析脚本并遇到语法无效代码时。如果 JavaScript 文件包含语法错误,将执行文件中的 none 代码。
在你的第二个代码中,你没有语法错误,而是语义错误,这就是为什么你的第二个脚本会显示警报。
脚本未按预期运行的原因是您假设 javascript 只会查看一行,执行它,然后继续下一行。
然而,javascript实际上事先查看了整个文件。例如,它可以调用一个尚未声明但在文件下方声明的函数:
showAlert();
function showAlert() {
alert("javascript is not executed line by line");
}
如果javascript只是逐行遍历文件,第一次遇到showAlert()
是不会知道
如果发现语法错误,代码将不会 运行。请注意,您的第二个示例是不同的,因为它实际上没有语法错误——只是未知的 whatever
.