2017-11-23 20 views
1

間の出力内容を表示する方法、解析方法があります。そのメソッド内でその値にレールは私のレール<b>application_helper.rb</b>ファイルで<%= >と<%== >

<form> 

、他のhtmlタグ、および

&nbsp; 

を含む文字列変数HTML、です。私は解析意志出力への呼び出しHTML変数の値

<%= parse() %> 

で、index.html.erb私のビュー内解析を呼び出します。

は全く予想外なことに、私はつまり、Webページではなく、フォームをレンダリングする書き込み

<form> 

が含まれ、ビューはブラウザがまったく処理しませんでしたWebページをレンダリングすることに気づきました。ように、そのような

<br>. 

そして

&nbsp; 

など他のすべてのタグ、にも対応するスペースに置き換えられていませんでした。

ウェブページのソースコードをチェックするには、私は(例えば

&nbsp; 

のような)全てのアンパサンドが

&amp; 

と<たように、ブラウザにビューによって送信されたことに気づい>

&lt; 

と同様に送信されます。

何が起こったのですか?

<%= %> 

<parse()> 

を置くブラウザにそれを渡す前HTMLの値を処理しましたか?どうして?私は

<%== %> 

パース()を置くとき

パズルの別の部分は、Webページが正常にレンダリングされたされた(私は、私はちょうど、

<%== %> 

が正しい構文ではありません知っています間違ってこのパズルを発見しました。)

何が起こっているのですか?

答えて

2

<%= =>セキュリティ上の理由からすべてのタグをエスケープします。たとえば、私は<script>...something bad to steal your accesses, cookies, make redirects, etc</script>という名前のスクリプトを入れます。私のプロフィールにアクセスすると、このスクリプトが実行されます。この攻撃は、クロスサイトスクリプティング(XSS)と呼ばれています。だから、レールはあなたを気にして、XSS攻撃を防ぐためにすべてのものから脱出します。

は何あなたが探していることは、この方法で、あなたの表現呼び出すことです:

<%= raw(parse()) %> 

またはそれはあなたが言及したことを、別名です:

<%== parse() %> 

詳細 - http://edgeguides.rubyonrails.org/active_support_core_extensions.html#output-safety

これがすべきをすべてのタグをエスケープせずに保管しておきますが、心に留めておいてください。ユーザがparseに入力したデータがあれば、XあなたのアプリケーションのSSの脆弱性。あなたが決してすべきではありません。 )

関連する問題