我正在尝试制作一个简单的“多搜索引擎”页面,而我的一些代码已经遇到了问题。到目前为止,我只在google中编码,但是它不起作用,我想知道为什么,因为所有代码似乎都是正确的。它根本不会重定向,只给我一个空白页。我正在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>
答案 0 :(得分:1)
您的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");
,该代码最终将在客户端执行。
在表单操作中要考虑的其他事情,总是用协议定义URL,除非它是相对路径(以避免混淆和将来的错误)。因此,请勿使用<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。