問題タブ [html-safe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Rails 3 で <%= note.html_safe %> と <%= h note.html_safe %> が同じ結果になるのはなぜですか?
何が起こっているのかを理解する必要がある String クラスに抽象化を追加するように感じhtml_safe
ます。たとえば、
4 行目で、文字列を信頼すると言っている場合、文字列は安全ですが、なぜエスケープできないのでしょうか? でエスケープするにh
は、文字列が安全でない必要があるようです。
したがって、1 行目で、文字列が でエスケープされていない場合、h
自動的にエスケープされます。5 行目でh
は、文字列を 2 回エスケープすることはできません。つまり、<
が に変更された後<
、 にもう一度エスケープすることはできません&lt;
。
それで、何が起こっているのですか?html_safe
最初は、文字列にフラグを付けて、安全だと言っているだけだと思っていました。では、なぜそれをh
回避しないのでしょうか。h
フラグの使用にhtml_escape
実際に協力しているようです:
1) 文字列が html_safe の場合、h
エスケープしません
2) 文字列が html_safe でない場合、文字列が出力バッファに追加されると、 によって自動的にエスケープされh
ます。
3)h
すでに文字列をエスケープしている場合は とマークされhtml_safe
ているため、もう一度エスケープしてh
も効果はありません。(5行目と同じように、その動作はRails 2.3.10でも同じですが、Rails 2.3.5h
では実際に2回エスケープできます...したがって、Rails 2.3.5ではh
単純なエスケープ方法ですが、どこかで2.3.10 への行はそれほどh
単純ではなくなりました.しかし、2.3.10 は文字列を自動エスケープしませんが、何らかの理由で、メソッドhtml_safe
は 2.3.10 用に既に存在します (何の目的で?))
それはまさにそれがどのように機能するのですか?最近では、出力に必要なものが得られず、すぐにhtml_safe
変数に追加することがあると思いますが、これは非常に危険な場合があります。XSS 攻撃がそのように導入される可能性があるため、正確にどのように機能するかを理解することが非常に重要になる可能性があります。上記は、正確にどのように機能するかの推測にすぎません。それは実際には別のメカニズムである可能性があり、それをサポートするドキュメントはありますか?
ruby-on-rails - すべてのhtmlタグを許可せずにテキストエリアの改行文字を解析する
ユーザーがコンテンツを入力できるテキストエリア フィールドがあります。\n
ページにエントリを表示する場合、レールは改行ごとに戻りますが、ページの html では改行がまったくないように見えます。
私が収集したものから、これを回避する標準的な方法は、レンダリングを確実にするために.gsub
コマンドを に置き換え\n
、最後に<br />
aを付けることです。.html_safe
<br />
問題は、コンテンツを html_safe にしたくないということです。html は引き続き置換する必要がありますが、<br />
タグは (エスケープされていない) コンテンツに挿入する必要があります。
提案をいただければ幸いです。
ruby-on-rails - Rails 3:i18nフォームヘルパーの翻訳でHTMLを使用する
自動フォームラベルヘルパーを使用してフォームラベルを作成し、i18nサポートを介して翻訳してもらいますが、ラベルにHTMLを含めたいので、HTMLを安全にする方法がわかりません。
例えば:
最終的に:
しかし、私はそれを次のようにしたいと思います。
出力の前にエンコードされないように、翻訳をhtml_safeとして指定する方法はありますか?
また、これはHTMLをセットアップするための最もセマンティックな方法のように見えますが、これに完全に間違った方法でアプローチしている場合は、提案を受け入れることができます。
ありがとう :)
更新しました:
ruby-on-rails - Ruby on Rails フォーム ヘルパーにエラーがあるとエスケープされる
私は Rails 2.3.9 を使用しており、rails_xssプラグインをインストールしています。html_safe にする必要があるものはすべて作成しましたが、フォーム ヘルパーが検証に失敗した場合の問題に気付きました。間違った電子メール アドレスを入力して検証に失敗すると、ブラウザに次のように表示されます。
これは rails_xss に関係していると思いますが、修正方法がわかりません。ありがとう
ruby-on-rails - 消毒しても安全ですか?
私はリッチテキストエディター(CKEditor)を使用しており、他のユーザーに表示されるプロファイルをユーザーが作成できるようにする機会があります。
CKEditorが制御できる属性の多くは、次のように表示すると失われます。
私の質問は、属性「style」を解析できるようにするのは安全ですか?これにより、テキストの色、サイズ、背景色、中央揃え、インデントなどを表示できます。ハッカーが私が知らないものにアクセスできないようにしたいだけです。
ruby-on-rails - 未定義のフィールドを持つhtml_safe
必須ではないフィールドがあります。つまり、nilにすることができます。ビューでffg:myfield.html_safeを使用したいと思います。これは、マイフィールドがないアイテムでは機能しません。例外が発生しましたが、フィールドが定義されている場合にのみhtml_safeを適用するにはどうすればよいですか?ありがとう
ruby-on-rails-3 - Rails 3 I18n翻訳を自動的に安全にする方法は?
Rails 3 を使用しています。I18n に、補間で使用される文字列の「html 安全性」を尊重し、すべての翻訳済み文字列をデフォルトで html 安全にするように指示する簡単な方法はありますか? だから私はこれを持っている場合en.yml
:
を使用するt('user_with_name', :name => @user.name)
と、ユーザー名の html がエスケープされますが、そのままに<em>
なり</em>
ますか?
javascript - Railsでjavascriptで生成されたhtmlをエスケープする方法は?
私のページの片側には、非常にシンプルなメールフォームがあります。反対側には、提案された電子メールのプレビューがあります。例えば:
ユーザーがフィールドに入力したら、キーアップのプレビューを更新したいと思います。私はそれを行うために小さなjs関数を書きました:
Railsが私のHTMLをエスケープして、がらくたのように見せたい場合を除いて、すべてがうまく機能します。
通常、これは問題ないことを私は知っています。raw
またはを追加するだけhtml_safe
です。しかし、マークアップはキーアップ(またはページの読み込み)に基づいて動的に構築されているため、ここではそれを行うことはできません。私はいくつかの簡単な解決策を逃していますか?回避策のアイデアはありますか?私の唯一のアイデアは、プレビューをiframeにロードすることです。これはまったく奇妙に思えます。
これは途方もなくイライラします。誰か助けてください!
ruby-on-rails - Rails 3コントローラーからビューに返された乱雑な "
Rails 3 アプリ コントローラーには、次のコードがあります。
Rails コンソールでは、きれいに見えます。
私の見解では、 @data_dump オブジェクトがエンコードされます:
この汚れをどうやってきれいにしますか?オブジェクトが端末に表示されるように、オブジェクトをビューに表示したい。前もって感謝します!
ruby-on-rails-3 - Rails3の小さなmce表示タグ
tinyMCEのコンテンツを「詳細」列に保存しようとしています。
これで、コンテンツを表示すると、すべての<p>
タグタグ<i>
などが表示されます。これは、rails3のセキュリティ機能です。
ただし、<p>
タグを表示したくないので、HTMLとしてレンダリングしたいと思います。
私が見つけた1つの方法は<%= something.detail.html_safe %>
私が考えたもう1つの方法は、次のようなモデルで関数を作成することでした。
を使用して表示<%= something.detail_safe %>
<%= %>
どちらの方法でも、多くの場所でタグを変更する必要があります。より簡単な解決策はありますか?または、すべての場所で手動で変更する必要がありますか?
ありがとうございました。