2

などのフォームのパラメーターを送信すると'password'、Sinatra のログで次のように表示されます。

{"api_session":"da1123f8c5edd2d3b7c8b43a4e93b7c2","password":"12323"}

のようなアスタリスクを使用してパスワードを非表示にするにはどうすればよい"******"ですか?

たとえば、Rails では、パラメーターのフィルターを有効にすることができます。

class ApplicationController < ActionController::Base
  filter_parameter_logging :password

シナトラでも同じことができますか?

4

2 に答える 2

3

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"いずれにせよ、フォームを修正すれば残りの問題は修正されます。

于 2013-01-04T14:50:14.970 に答える
1

私はこの問題を別の方法で解決しました。

フォームを使用せず、データを含む「put」ajaxリクエストを送信します。

Sinatraが自分のプリントアウトのみをログに記録するように書き込んでいるのを見逃しました。必要なすべてのパラメータをキャッチして、それらをフィルタリングできます。

put '/api/*' do |path|
  data = request.body.read.to_s
  filtered_data = data
  filtered_data[:password] = '********'
  puts filtered_data #into log
  #...

ティンありがとう!

于 2013-01-04T16:23:13.703 に答える