<body><H3>留言內容</H3><fieldset><h2><% out.print(request.getParameter("message"));%></h2></fieldset></body>
攻击方法1
攻击方法2
解决方案1
較常用的手段就是進行輸入資料的過濾,將危險字元進行替換,程式碼如下:
<body>
<H3>留言內容</H3>
<fieldset><h2>
<%
String message = request.getParameter("message");
message = message.replace ('<',' ');
message = message.replace ('>',' ');
message = message.replace ('"',' ');
message = message.replace ('\'',' ');
message = message.replace ('/',' ');
message = message.replace ('%',' ');
message = message.replace (';',' ');
message = message.replace ('(',' ');
message = message.replace (')',' ');
message = message.replace ('&',' ');
message = message.replace ('+','_');
out.print(message);
%>
</h2>
</fieldset>
</body>
解决方案2
利用正規函式,只顯示允許使用者輸入指定的字元:
<H3>留言內容</H3>
<fieldset><h2>
<%
String message = request.getParameter("message");
if(isValidInput(message)){
out.print(message);
}
else
out.print("you have WRONG Input!");
%>
</h2>
</fieldset>
<%!
public boolean isValidInput(String str)
{
if(str.matches("[a-zA-Z0-9 ]+")) return true;
else return false;
}
%>