私の Web アプリケーションでは.load()
、JQuery の関数を使用しJSP
て、DIV
.
$("#myDiv").load("chat.jsp");
ではchat.jsp
、このクライアントがログインしていない限り、Java コードは実行されません。つまり、セッションをチェックします。
String sessionId = session.getAttribute("SessionId");
if(sessionId.equals("100")){
//execute codes
}else{
//redirect to log in page
}
実行されるこれらの Java コードは、out.println();
いくつかの HTML 要素になります。
クライアントがこのページにアクセスするためにブラウザーに書き込むことは望ましくありません。/chat.jsp
見栄えが悪く、メインページの他のものが表示されず、Web アプリのセキュリティに害を及ぼす可能性があるからです。
chat.jsp
誰かが直接アクセスできないように制限しながら、経由でアクセスできるようにするにはどうすればよい.load()
ですか?
アップデート:
JavaDB は私が作成したクラスで、データベースに接続します。
これはchat.jspです
<body>
<%
String userId = session.getAttribute("SessionId").toString();
if (userId != null) {
String roomId = request.getParameter("roomId");
String lastMessageId = request.getParameter("lastMessageId");
JavaDB myJavaDB = new JavaDB();
myJavaDB.Connect("Chat", "chat", "chat");
Connection conn = myJavaDB.getMyConnection();
Statement stmt = conn.createStatement();
String lastId = "";
int fi = 0;
ResultSet rset = stmt.executeQuery("select message,message_id,first_name,last_name from users u,messages m where u.user_id=m.user_id and m.message_id>" + lastMessageId + " and room_id=" + roomId + " order by m.message_id asc");
while (rset.next()) {
fi = 1;
lastId = rset.getString(2);
%>
<div class="message">
<div class="messageSender">
<%=rset.getString(3) + " " + rset.getString(4)%>
</div>
<div class="messageContents">
<%=rset.getString(1)%>
</div>
</div>
<% }
%>
<div class="lastId">
<% if (fi == 1) {%>
<%=lastId%>
<% } else {%>
<%=lastMessageId%>
<% }%></div>
<% if (fi == 1) {%>
<div class="messages">
</div>
<% }
} else {
response.sendRedirect("index.jsp");
}%>
</body>
フィルタの意味がわかりません。
アップデート
このリクエストが Jquery からのものであることを示すパラメーターを送信することにしたとします。
.load("chat.jsp", { jquery : "yes" });
そして、chat.jsp で確認します。
String yesOrNo = request.getParameter("jquery");
次に、この URL を使用して簡単にハッキングできます。
/chat.jsp?jquery=yes
またはそのようなもの..
アップデート
Maksim のアドバイスを試してみたところ、chat.jsp にアクセスしようとしたときにこれが表示されました。
これは望ましい効果ですか?