HTML でフォームを定義する方法は示されていませんがmethod="get"、ブラウザが Sinatra にデータを送信する方法を使用しているか指定していないため、デフォルトでget.
次のようにフォームを定義すると:
<html>
<body>
<form action="do_form" method="get">
User: <input name="user"><br>
Passwd: <input type=password name="passwd"><br>
<input type="submit">
</form>
</body>
</html>
これを私のハンドラーとして:
get '/do_form' do
puts "got user/password"
end
ブラウザを使用してフォームを送信すると、コンソールに次のように表示されます。
got user/passwd
127.0.0.1 - - [04/Jan/2013 07:43:24] "GET /do_form?user=foo&passwd=bar HTTP/1.1" 200 - 0.0041
Sinatra は、受け取ったパラメータを出力しても安全だと考えています。次のようにフォームを定義すると、同じことが起こります。
<form action="do_form">
代わりに、次のように定義するとします。
<form action="do_form" method="post">
postの代わりにハンドラーを使用しますget。
post '/do_form' do
puts "got user/passwd"
end
代わりに、ログに次のように表示されます。
got user/passwd
127.0.0.1 - - [04/Jan/2013 07:49:24] "POST /do_form HTTP/1.1" 200 - 0.0015
これは、これをテストするために使用したコードです。
require 'sinatra'
get '/' do
'
<html>
<body>
<!-- <form action="do_form"> -->
<!-- <form action="do_form" method="get"> -->
<form action="do_form" method="post">
User: <input name="user"><br>
Passwd: <input type=password name="passwd"><br>
<input type="submit">
</form>
</body>
</html>
'
end
get '/do_form' do
puts "got user/passwd"
end
post '/do_form' do
puts "got user/passwd"
end
get '/'ハンドラーでフォームの定義を変更して、 または のいずれpostかを使用してみてくださいget。
リクエストは、フォームが送信されるときにすべてのgetパラメーターを URL に入れます。getフォームの定義に従って「平文で」送信されたため、Sinatra がその時点でこれらのパラメーターをログに出力することは理解できます。
使用するフォームを変更するpostと、URL の一部としてではなく、受信データの本文にパラメーターが配置され、詮索好きな目からより効果的に隠蔽されます。Sinatra は、出力にパラメーターを表示しないことで応答します。
getWeb 開発者は、またはpostをフォームの として使用した場合の影響を認識する必要がありますmethod。あなたがフォームを担当していない場合は、フォームを使用することの効果とget、パラメーターが URL に挿入されることを知っているはずです。passwordフィールド、または非表示である、または非表示にする必要があるフィールドは、HTML およびブラウザーの予期された定義済みの動作であるため、hidden使用するフォームでは使用できません。method="get"いずれにせよ、フォームを修正すれば残りの問題は修正されます。