2009-09-01 6 views

答えて

4

パラメータ化クエリのみを必要としているあなたは、動的データを使用してクエリを生成している場合:....

EDITを削除します。ユーザー。

も便利ですオラクル、のようなものの上にこれらのクエリを使用するための利点があります。あなたがすることができる他

何かがデータベースに接続するユーザーが必要な最小限の権限を持っていることを確認することです。

あなただけのアクセスを行うためにストアドプロシージャを使用することができますが、動的なクエリを作成する必要がある場合にはより困難である、あなたの妄想によって http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

あなたはSQLインジェクションに対する保護に関するいくつかの提案をここに見ることができます。

ビューでトリガーを使用しない限り、ビューを使用することはできません。ビューを使用すると、そのクエリーを使用してデータベース内のデータを変更できます。 http://www.wwwcoder.com/Directory/tabid/68/type/art/site/2966/parentid/258/Default.aspx

しかし、合理的であるよりも多くのセキュリティを置くことにはポイントがありませんので、あなたは、あなたが保護し、どこまで行くになっているものを比較検討する必要があります使用することができます

別ページはこちらです。

たとえば、いくつかの列を暗号化する価値はありますか?そのため、鍵を保護する方法についてはより多くの問題が発生しますが、マシンにハッキングする人がいて、データベースファイルを入手することが心配されている場合は、考慮する必要があります。

7

パラメータ化されたクエリを使用する場合は、投稿に記述した内容を行う必要はありません。 This articleは、この件に関するかなり良い議論のようです。

SQLインジェクション攻撃から保護するための銀色の箇条書きは、のみ、パラメータ化されたクエリを使用してユーザー入力をSQLに渡します。

+0

で始まる言語で書かれた特に私は明示的に「私はこのポストを精製する過程で午前」 –

+0

@Rex Mを愛し:* blush * –

+1

+1使用されたパラメータ化されたクエリ以外は何もする必要はありません。すべてのセキュリティ作業はあなたのために行われます。引用符を取り除くために余分な作業をしようとすると、パラメータの後に完全に無駄になります。 –

1

すべての入力が引用符で囲まれていることを確認してください。 ...受け入れられた= 1か年齢30のようなものがあれば、そこにセキュリティホールがある可能性があります:...受け入れられた= 1;はい、攻撃者が1" を使用することができ、DELETE、それはエスケープ入力では動作しません

+2

攻撃者は単に引用符を入れることもできます: ';; DROP TABLE ...' –

+0

私のコメントを入力するために時間をとっているのです:) –

+0

Rex M、彼はすでに彼がエスケープしていると言っていました"そのため、そのアプローチはうまくいかないでしょう。入力がエスケープされていればそれはうまくいかないでしょうか? –

0

cyberpunkは、連結を介してuriクエリからperlシェルを取得できます。 3つのソリューションはストアドプロシージャ、preparedstatementsまたはgqlを代わりに使用しています。

+0

「サイバーパンク」 - これは私がしばらく聞いたことのない言葉です。 –

3

技術的には、JavaScriptとHTMLはSQLインジェクション攻撃とは関係ありませんが、インジェクション攻撃です。

私はストップすることに同意しません。少なくとも、これを行ったことをユーザーに知らせることはありません。実際の入力は実際には有効かもしれませんが、特定の文字を削除すると入力のセマンティクスが実際に変更される可能性があります。 URL、LDAP、XML、File Pathインジェクション攻撃はどうでしょうか?

SQLインジェクションは、入力されたデータからダメージを与える可能性のある文字を取り除くことで最も効果的だと主張する多くのセキュリティ "priests"(私が言うこと)があります。 O'Brianをexmapleの有効な入力として受け入れない限り、それは問題ありません。彼らが正しい暗号化について説教していれば、そのすべての努力が注射の攻撃の全体を扱うために使われたかもしれないからです。 " "" ".Replace( ' -

USERINPUT = userInput.Replace(" "")":

は、実際に私はかつてのようなものを書いたMSのセキュリティ専門家によって書かれたコードに対処しなければなりませんでした);

仲間と公平で、彼は非常に巧妙な弟子であり、彼は今日このことを書いていないと確信していますが、 "MyName-'SELECT * FROM User"が実際にこの保護を回避する方法を知ることができますか?

有効な値をブロックしない限り、受け入れることのできる文字の範囲は限られません。 <も有効な数学演算子であるか、またはユーザーがHTMLコードの例を入力する必要があるかもしれません。値のコンテキストは、有効なものと有効でないものを決定します。

次に、許可されていない文字を含む値が表示された場合は、無効な値についてユーザーに知らせるエラーを表示し、再送信する前に修正を依頼します。これはあとで多くの悲しみを救うことができます。これは、データの検証とプログラムの機能をセキュリティに関して保証することと同じくらいです。そして、はい、トラフィックを抑えるためにクライアント側でチェックし、攻撃を防ぐためにサーバー側でチェックする必要があります。

そして、レンダリングするたびに値が適切にエンコードされます。パラメータ化されたクエリはSQLインジェクションを解決する上では問題ありませんが、HTML、URL、JavaScriptのレンダリングでは機能しません。値の正しいSQLエンコーディング(例えば、二重一重引用符を例に挙げた)は安全であり、場合によっては適切です(すべてがストアドプロシージャであり、正しくエンコードされた動的SQLが可能であると主張しない合理的なDBAがいると仮定します)。

もう1つの点として、System.WebのHTMLおよびURLエンコード関数にはいくつかの欠陥があります。これらの問題に対処し、より具体的なエンコードオプションを提供するAnti-Cross Site Scriptingライブラリを制作したMicrosoftチームがいます。私はそれがAnti-XSSと呼ばれると思います。確かに見る価値がある。私はそれが.Net 4に組み込まれているのだろうか?

0

パラメータ化されたクエリは、悪意のあるものを排除するために長い道のりを歩いていますが、新しい脆弱性を引き起こす、奇妙な、注入可能な動的SQLコンソーシアムがないことを確認します。

その他、狂人フリンジアイデア:人気のオープンソースパッケージを実行しない、P.

関連する問題