gpt4 book ai didi

javascript - 无法让 jsp 文件正常工作,不会按照脚本执行

转载 作者:行者123 更新时间:2023-11-30 19:26:13 26 4
gpt4 key购买 nike

我正在尝试制作一个简单的“多搜索引擎”页面,但我的一些代码已经出现问题。到目前为止,我只在谷歌中编码,但它不起作用,我想知道为什么,因为所有代码似乎都是正确的。它根本不会重定向,只是给我一个空白页。我在 tomcat 服务器(端口 8080)上运行 jsp 文件。希望有人能发现我做错了什么,谢谢。

这是主页的 HTML:

<html>
<head>
<title>Multi Search Engine Test</title>
</head>
<body>
<center>
<h1>Search test</h3>
</center>
<br>
<br>
<center>
<form action="192.168.2.127:8080/main/search.jsp" method="POST">
<input type="text" id="search" name="Search" />
<select name="site">
<option value="google">Google</option>
<option value="yahoo">Yahoo</option>
<option value="bing">Bing</option>
<option value="youtube">Youtube</option>
<option value="reddit">Reddit</option>
<option value="amazon">Amazon</option>
<option value="ebay">Ebay</option>
</select>
<input type="submit" value="Search" />
</form>
</center>
</body>
</html>

这是jsp文件的代码:

<% 
String search=(String)request.getAttribute("search");
String site=(String)request.getAttribute("site");
%>
<script>
if(site == "google")
{
window.open("https://google.com/search?q="+<%= search %>, "_blank");
}
else
{
window.open("http://192.168.2.127/error.html");
}
</script>

最佳答案

您的 jsp 代码似乎有一些错误。

例如,if(site == "google")比较未定义的 JavaScript 变量 site使用字符串“google”。我想你想要if("<%= site %>" == "google") ,这意味着您将打印 jsp 变量 site在引号内,因此生成的 JavaScript 代码将是字符串与字符串的比较。

window.open("https://google.com/search?q="+<%= search %>, "_blank");上也有类似的错误.例如,如果您发送查询 hello world ,您的 jsp 将生成代码 window.open("https://google.com/search?q="+hello world, "_blank");这是无效的 JavaScript 代码。因此,您需要包装 jsp search引号中的变量,例如 window.open("https://google.com/search?q=" + "<%= search %>", "_blank");甚至更好的是也对字符串进行编码,因为它将用于 URL window.open("https://google.com/search?q="+encodeURIComponent("<%= search %>"), "_blank");

话虽如此,使用后端只是为了将工作交还给 JavaScript 是没有意义的。现在您的后端只是将表单数据回显给 JavaScript。

此外,如果未正确处理(安全打印),原始打印字符串变量并将它们传递给 JavaScript 允许跨站点脚本 (XSS)。例如,在您的情况下,攻击者可能会搜索 " + alert('xss') + "你的 jsp 将打印代码 window.open("https://google.com/search?q="+encodeURIComponent("" + alert('xss') + ""), "_blank");最终将在客户端执行。

还有一些事情需要考虑,在您的表单操作中,始终使用协议(protocol)定义 URL,除非它是相对路径(以避免混淆和 future 的错误)。所以,不要使用 <form action="192.168.2.127:8080/main/search.jsp" method="POST">使用 <form action="http://192.168.2.127:8080/main/search.jsp" method="POST"> .

请不要使用 center , 现在是 2019 :P.

关于javascript - 无法让 jsp 文件正常工作,不会按照脚本执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56878861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com