2009-07-03 10 views
1

私は後で参照できるようにコードのスニペットを格納できるRailsアプリケーションを実装しています。私は、Markdownをテキスト入力に使用する予定で、おそらくwmd markdown editorを使用します。 (1つのStackoverflowが使用します。)ユーザーがコードサンプルを入力できるようにする最も危険な方法は何ですか?

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

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

注意する必要があるその他の予防措置はありますか?

答えて

5

あなたのDBエントリを単に消毒しても問題ありません。 Railsはデフォルトでこれを行います。フレームワークを正しく使用するだけです。より多くの情報のためにこれをチェックしてください:あなたはまた、参考のため

<%=h possible_harmful_text %> 

を行くことによってXSS攻撃を防ぐために持っている

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

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

ませTHIS:http://wiki.rubyonrails.org/howtos/security/sql_injection

は、これを行います:

クロスサイトスクリプティング(XSS)は、通常、他のユーザーが閲覧Webページ に 悪意のあるWebユーザーによるコードインジェクションを許可するWebアプリケーション で見つかったコンピュータセキュリティの脆弱性 の種類 です。 の例には、クライアントサイドスクリプトが含まれています。 悪用されたクロスサイトスクリプティング の脆弱性を攻撃者 が同じオリジンポリシーの などのアクセス制御をバイパスするために使用する可能性があります。この種類の脆弱性 は、強力なフィッシング攻撃とブラウザ の脆弱性を改ざんするために悪用されています。クロスサイトスクリプティングは、2007年のよう 脆弱性は、多くの場合、 攻撃の不正アクセスを 対象となることがあり、エンドユーザーに「すべてが 罰金に見える」中 の約80%であったウェブサイト上の盗難をすべて文書化し、セキュリティを を行って機密データの 、財務 の損失 (via wikipedia

もちろん

SQLインジェクションは、アプリケーションの データベース層で発生したセキュリティ 脆弱性を悪用コードインジェクション 技術です。 ユーザーが 入力を間違ってフィルタリングすると、 文字列リテラルエスケープ文字の場合 がSQLステートメントに埋め込まれているか、またはユーザー の入力が厳密に入力されていないため、予期せず実行されます。 のより一般的なクラスのインスタンスは、 という脆弱性が発生する可能性があります。 言語が別の言語に埋め込まれていると、 SQLインジェクション攻撃として、SQLインジェクション攻撃も知られています( )。 1via wikipedia

+0

ウィキペディアから、私はそれを取る? ;) –

+0

ありがとうございます^^私はすぐに参照を追加します – marcgg

3

ユーザーは、コードのスニペットを入力することが推奨されますので、あなたは特別な状況ではありません。人々は、奨励されていないフィールドにコードスニペットを入力できます。基本的に、あなたは常に "余分な注意を払う"べきです。ユーザーの入力を信頼しないでください。

2

あなたはサンプルをコードを受け入れるのではなく、実際のコードを許すにおける安全な位置に実際にしています。これは、例えば、 Stack Overflowでは実際のHTMLを入力して投稿を制御できます。

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

あなたが何かを評価していない限り、あなたはテキスト入力を受け入れる他のサイトと同じボートにいます。標準的なデータ入力の原則に従う。すべての入力をどこにでも書き込む直前にエスケープしてください。うまくいくでしょう。

関連する問題