1

ユーザーが後で参照できるようにコードのスニペットを保存できるRailsアプリケーションを実装しています。テキスト入力に Markdown を使用する予定で、おそらくwmd markdown editorを使用する予定です。(まさに Stackoverflow が使用するものです。)

人々が編集ボックスにコードを入力するという考えについて、私は少し心配しています。私が理解していることから、DB を台無しにする可能性のある SQL を入力したり、後で実行されていたずらをする JavaScript を入力したりする危険性があります。

通常、Rails にはこれを防ぐための機能がありますが、ユーザーがコードのスニペットを入力するように促されるので、私は特別な状況に置かれているのでしょうか?

知っておくべき追加の予防措置はありますか?

4

3 に答える 3

5

DB エントリをサニタイズするだけで問題ありません。Rails はデフォルトでこれを行います。フレームワークを正しく使用するだけです。詳細については、こちらをご覧ください: http://wiki.rubyonrails.org/howtos/security/sql_injection

これを行う:

Project.find(:all, :conditions => ["name = ?", params[:name]])
# or
Project.find(:all, :conditions => {:name => params[:name]})

これではない:

Project.find(:all, :conditions => "name = '#{params[:name]}'")

また、XSS 攻撃を防ぐ必要があります。

<%=h possible_harmful_text %>

参考のため:

クロスサイト スクリプティング (XSS) は、Web アプリケーションで一般的に見られるコンピューター セキュリティの脆弱性の一種であり、悪意のある Web ユーザーが、他のユーザーが表示する Web ページにコードを挿入できるようにします。このようなコードの例には、クライアント側のスクリプトが含まれます。攻撃者は、悪用されたクロスサイト スクリプティングの脆弱性を使用して、同一オリジン ポリシーなどのアクセス制御をバイパスできます。この種の脆弱性は、強力なフィッシング攻撃やブラウザ エクスプロイトを作成するために悪用されています。Web サイトで実行されるクロスサイト スクリプティングは、2007 年の時点で文書化されたすべてのセキュリティ脆弱性の約 80% でした。多くの場合、攻撃中、エンド ユーザーは「すべて問題ないように見えます」が、不正アクセス、機密データの盗難、および金融被害を受ける可能性があります。損失。(ウィキペディア経由

そしてもちろん

SQL インジェクションは、アプリケーションのデータベース層で発生するセキュリティの脆弱性を悪用するコード インジェクション手法です。この脆弱性は、ユーザー入力が SQL ステートメントに埋め込まれた文字列リテラル エスケープ文字に対して正しくフィルター処理されない場合、またはユーザー入力が厳密に型指定されていないために予期せず実行される場合に存在します。これは、あるプログラミング言語またはスクリプト言語が別の言語に組み込まれるたびに発生する可能性がある、より一般的なクラスの脆弱性のインスタンスです。SQL インジェクション攻撃は、SQL 挿入攻撃とも呼ばれます。1 (ウィキペディア経由)

于 2009-07-03T22:30:23.717 に答える
3

ユーザーはコードのスニペットを入力するように促されるため、特別な状況ではありません。推奨されていないフィールドにコードのスニペットを入力できます。基本的には、常に「特に注意」する必要があります。ユーザー入力を信用しないでください。

于 2009-07-04T18:51:22.590 に答える
2

実際のコードを許可するよりも、コードサンプルを許可する方が安全な立場にいます。つまり、たとえば Stack Overflow では、実際の HTML を入力して投稿を制御できます。

実際のコードを許可することは、そのコードを評価することになるため、はるかに危険です。スタック オーバーフローの例では、サイトは実際に次のような入力マークアップを評価<a href="http://example.com/">link</a>しています。これは、onclick ハンドラなどを監視する必要があることを意味します。完全なサニタイズは、単にエスケープするよりもはるかに困難です。

したがって、何も評価していない限り、テキスト入力を受け入れる他のサイトと同じボートに乗っています。標準的なデータ入力の原則 (たとえば、どこかに書き込む直前にすべての入力をエスケープするなど) に固執すれば問題ありません。

于 2009-07-05T05:11:45.957 に答える