問題タブ [sql-injection]
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.
php - PHP は SQL インジェクションから身を守る?
");--
入力フィールドから localhost PHP サーバーに送信すると、自動的に次のように変換されます。
\");--
この動作がどれほど信頼できるかわからないことを除けば、それは素晴らしいようです。SQL インジェクションを回避しているように見えますが、私の開発環境は本番環境と同じではなく、本番環境ではこの種の保護が自動的にアクティブ化されないのではないかと心配しています...
なぜPHPはこれを行うのですか(を使用せずに入力を変換しますmysql_real_escape_string
)? それは常にそれを行いますか、それとも特定の拡張機能でのみ行いますか? SQL インジェクションを防ぐためにこの動作に頼るのは安全ですか?
python - Python 標準ライブラリ (バージョン 2.5 など) を使用して、パラメーター化された MS-SQL クエリを実行することは可能ですか?
私が現在扱っている特定のデータはユーザーが生成したものではなく、通常の検証ルーチン中にその寿命の 1 インチ以内にサニタイズされますが、基本的な INSERT、SELECT などを実行する方法を学びたいと思います。今後の参考のために、SQL インジェクション攻撃から身を守りながら SQL クエリを実行します。パラメータ化されたクエリを使用して、「正しい」方法で物事を行う方法を学びたいと思います。
サニタイズは常に素晴らしいことですが、私は自分の哀れな知性と熟練したハッカーの知性とを戦わせています。ブラックリストはホワイトリストほど堅牢ではないため、手動でエスケープするということは、おそらく物事を見落としていることを意味します。(%s)
さらに明確にするために、表記法を使用して、おそらく という名前の文字列を作成するためのパラメーターとして渡すという意味ではありませんsqlstatement
。私が知っておくべき魔法の言葉の 1 つが「束縛」だと思います。
また、Python 標準ライブラリ以外のものは避けたいと思っています。
問題のアプリケーションには、関連する場合、Microsoft SQL 2005 が必要です。ActiveState Python とモジュール dbi および odbc を使用しています。これは他人のデータベースであるため、ストアド プロシージャは使用できません。
c# - INSERT での SQL インジェクション
会社のイントラネットに小さな調査 Web ページを作成しました。このウェブページは外部からアクセスできません。
フォームは、いくつかのラジオ ボタンとコメント ボックスだけです。
適切なコーディング プラクティスを維持し、SQL インジェクションを防止したいと考えています。
テキストボックスからのコメントを含む挿入ステートメントで SQL インジェクションが発生する可能性はありますか? もしそうなら、.NET 2.0 を使用してそれを防ぐにはどうすればよいですか?
java - Javaでデータベース入力をサニタイズするにはどうすればよいですか?
ユーザー入力から部分的に形成された SQL クエリを安全に実行するための優れた初心者ガイドを教えてください。私は Java を使用していますが、言語に依存しないガイドでも問題ありません。
望ましい動作は、誰かが GUI に次のように入力した場合です。
very nice;) DROP TABLE FOO;
データベースはそれをリテラル文字列として扱い、テーブルを削除することなく安全に保存する必要があります。
php - ZendのPHP、クエリの変数をエスケープする方法は?
Zend Framework でいくつかのクエリを実行していますが、次の種類の形式で SQL インジェクションが不可能であることを確認する必要があります。私は mysql_escape (非推奨) を使用できますが、すべての作業を行うわけではありません。real_mysql_escape を使用しようとすると、データベースとの接続を取得できず、zend_filter が問題を解決する方法がわかりません。
私が行っている(単純化された)クエリには、次の構文があります。
このフレームワークで SQL インジェクションを防ぐ最善の方法は何ですか?
sql - SQL Server: インジェクション攻撃に対する @param のサニタイズ
議論のために、INSERT を持つ SQL クエリを含むローカル変数を作成する必要があるとしましょう。
この INSERT には、列の値も含まれます。
さて、私は明らかにインジェクション攻撃を懸念しており、@message の値によって @insert の値が悪意のあるものや、EXEC へのクエリとして不正な形式にならないようにしたいと考えています。
これは私の質問につながります: @message の ' 文字をエスケープするだけで十分ですか? @message に表示され、エスケープできる他の文字はありますか?
例:
(私が「する必要がある」と言うとき、これはクエリがストアド プロシージャにあり、このストアド プロシージャが INSERT 先のテーブルである @table を受け入れるためです。自分のアーキテクチャや、なぜテーブルがto INSERT into は、プロシージャ パラメータを介して「動的に」指定されます。テーブル名をプロシージャ パラメータとして受け取ったときに、INSERT 先のテーブルを指定するクエリを EXEC() する以外に別の方法がない限り、これについてコメントすることは控えてください。)
mysql - MySQL での SQL インジェクション セキュリティの最適なソリューションは何ですか?
MySQL インジェクションが不可能であることを確認するために、文字列を実行するための最適な関数は何ですか?
また、正しく表示するには、途中で別の関数を実行する必要がありますか?
こちらもご覧ください
Sqlインジェクションを防ぐのにパラメータは本当に十分ですか?
C# Parameterized Query MySQL within
clause
一重引用符をエスケープし、ユーザー入力を一重引用符で囲むことにより、SQL インジェクションから保護できますか?
php - 一般的なエスケープ関数を使用するよりも、mysql のプリペアド ステートメントを使用する方が安全なのはなぜですか?
別の質問には、次のようなコメントがあります。
「データベースクエリに関しては、常に準備されたパラメーター化されたクエリを試して使用してください。mysqli および PDO ライブラリはこれをサポートしています。これは、mysql_real_escape_string などのエスケープ関数を使用するよりもはるかに安全です。」
だから、私が聞きたいのは、準備されたパラメーター化されたクエリがより安全なのはなぜですか?