スクリプトを実行させるな!
既に、フォームからテキストなどを送信し、それを受け取って処理するというWebのもっとも基本的な処理については説明しました。実際に簡単なWebアプリケーションを作ってみた人もいるかも知れませんね。
しかし、実をいえばまだ「フォームの送信の基本」についての説明は、すべて終わったわけではないのです。入力された情報を送受し処理するということだけができればOKなのではありません。もう1つ、非常に重要なことを知っておく必要があります。それは「セキュリティ」についての知識です。
とりあえず、先に作成した簡単なフォーム送信のJSPプログラムを例にして説明をしましょう。確か、こんなサンプルを作成しましたね?
<%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>JSP Page</h1>
<%
request.setCharacterEncoding("UTF-8");
String s = request.getParameter("text1");
if (s != null){
out.println("こんにちは、" + s + "さん!<br><br>");
}
%>
※送信フォーム<br>
<form method="post" action="index.jsp">
<input type="text" name="text1">
<input type="submit">
</form>
</body>
</html>
これは、実をいえばまだ未完成なのです。なぜなら、このプログラムには「でっかい穴」が開いているからです。「どこにそんなものが?」と思うかもしれませんね。では、実際に試してみましょう。WebブラウザでこのJSPページにアクセスし、入力フォームから以下のように入力をして送信してみてください。
<script language=javascript>alert(document.cookie);</script>
JavaScriptのタグを直接送信することで、スクリプトを実行させることができる。 |
送信すると、なぜか画面にアラートウインドウが現れ、なにやらよくわからないテキストがずらっと表示されたはずです。実は、これはWebブラウザに保管されているこのサイトのクッキー情報なのです。皆さんの中には、こんな感じのテキストが画面に表示された人もいることでしょう。
JSESSIONID=C33089C3BA4F6C440DFA294630229AB0
これは、現在のクッキー情報です。フォームを送信しただけなのに、なぜクッキーの内容が画面に表示されたりしたのでしょう? それは、このプログラムが「送信されたテキストをそのまま出力させる」ようになっていたためです。このため、<script>タグによるJavaScriptのスクリプトを送信すると、それがサーバからクライアントに出力される際に実行され、アラートが表示されたのです。