問題タブ [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.
sql-injection - パラメータ化された SQL 列?
インジェクションを防ぐためにパラメーター化されたクエリを利用するコードがいくつかありますが、テーブルの構造に関係なくクエリを動的に構築できる必要もあります。これを行う適切な方法は何ですか?
以下に例を示します。名前、住所、電話の列を持つテーブルがあるとします。Show Columnsを実行し、選択ドロップダウンにオプションとして入力するWeb ページがあります。
次に、 Searchというテキストボックスがあります。このテキストボックスはパラメータとして使用されます。
現在、私のコードは次のようになっています。
私はそれから不快感を覚えます。パラメータ化されたクエリを使用している理由は、エスケープの使用を避けるためです。また、エスケープは、列名をエスケープするように設計されていない可能性があります。
これが意図したとおりに機能することを確認するにはどうすればよいですか?
編集: 動的クエリが必要な理由は、スキーマがユーザー設定可能であり、ハードコーディングされたものを修正するつもりはないからです。
security - Web 開発中のユーザー入力の検証には、時間の何パーセントが費やされますか?
私はWeb上で物事を開発するのが初めてです。これまでのところ、私は多くの時間 (50% 程度) を費やして、悪い人が入力フォームに sql インジェクションなどを入れてサーバー側で検証するのを防ごうとしています。これは正常ですか?
php - htmlspecialchars と mysql_real_escape_string は PHP コードをインジェクションから安全に保ちますか?
今日、 Web アプリの入力検証戦略に関する質問がありました。
執筆時点での一番の答えは、とのみを使用することを示唆してPHP
います。htmlspecialchars
mysql_real_escape_string
私の質問は: これは常に十分ですか? もっと知っておくべきことはありますか?これらの機能はどこで壊れますか?
java - Java/JSPコードで潜在的なSQLインジェクションの問題を見つける
私は、さまざまなJavaenJSPベースのアプリケーションで構成される巨大なレガシーコードベースを持つ顧客のために働いています。
ほとんどのクエリは、ホームビルドの「orm」システムを使用して行われます。一部のアプリケーションは、プレーンオールドJDBCを使用します。一部のアプリケーションはHibernateに基づいています(はい、プラス記号を使用したHQLビルドも潜在的な問題です)。古いアプリケーションのいくつかは完全にJSPで書かれています。
SQLインジェクションのバグを手動でいくつか見つけました。しかし、私は実際にある種のツールを使用して、潜在的な弱点を探すことができました。
何か案は?
php - PHPでユーザー入力をサニタイズするにはどうすればよいですか?
特定の種類の HTML タグを許可しながら、SQL インジェクションや XSS 攻撃のユーザー入力をサニタイズするのにうまく機能するキャッチオール関数はどこかにありますか?
php - SQL インジェクションを防ぐには、PDO 準備済みステートメントで十分ですか?
次のようなコードがあるとします。
PDOのドキュメントには次のように書かれています:
準備済みステートメントのパラメーターは引用符で囲む必要はありません。ドライバーがそれを処理します。
SQL インジェクションを回避するために必要なことは本当にそれだけですか? それは本当に簡単ですか?
違いがある場合は、MySQL を想定できます。また、SQL インジェクションに対するプリペアド ステートメントの使用についてのみ興味があります。このコンテキストでは、XSS やその他の潜在的な脆弱性については気にしません。
sql - 単一引用符をエスケープし、ユーザー入力を単一引用符で囲むことにより、SQL インジェクションから保護できますか?
ユーザー入力を含むクエリを作成するときに、パラメーター化された SQL クエリがユーザー入力をサニタイズする最適な方法であることは認識していますが、ユーザー入力を取得して一重引用符をエスケープし、文字列全体を一重引用符で囲むことの何が問題なのか疑問に思っています。コードは次のとおりです。
ユーザーが入力した一重引用符は二重の一重引用符に置き換えられ、ユーザーが文字列を終了する機能を排除するため、セミコロン、パーセント記号など、ユーザーが入力する可能性のあるものはすべて文字列の一部になり、コマンドの一部として実際に実行されるわけではありません。
Microsoft SQL Server 2000 を使用していますが、単一引用符が唯一の文字列区切り文字であり、文字列区切り文字をエスケープする唯一の方法であると考えているため、ユーザーが入力したものを実行する方法はありません。
これに対して SQL インジェクション攻撃を開始する方法は見当たらないが、もしこれが私に思えるほど防弾であるなら、他の誰かがすでに考えていたであろうし、それは一般的な慣行であろう.
このコードの何が問題になっていますか? このサニタイズ手法を通過して SQL インジェクション攻撃を受ける方法はありますか? この手法を利用するユーザー入力のサンプルは非常に役立ちます。
アップデート:
このコードに対して SQL インジェクション攻撃を効果的に開始する方法はまだわかりません。バックスラッシュで 1 つの単一引用符をエスケープし、もう 1 つの引用符を残して文字列を終了し、残りの文字列が SQL コマンドの一部として実行されるようにすることを何人かの人々が提案しました。 MySQL データベースですが、SQL Server 2000 で単一引用符をエスケープする (私が見つけた) 唯一の方法は、別の単一引用符を使用することです。バックスラッシュはそれをしません。
また、一重引用符のエスケープを停止する方法がない限り、残りのユーザー入力はすべて 1 つの連続した文字列として処理されるため、実行されません。
入力をサニタイズするためのより良い方法があることは理解していますが、上記で提供した方法が機能しない理由を知りたいと思っています。このサニタイズ方法に対して SQL インジェクション攻撃を開始する特定の方法を誰かが知っている場合は、ぜひご覧ください。
php - 包括的なサーバー側検証
私は現在、かなり堅牢なサーバー側の検証システムを導入していますが、すべての角度をカバーしていることを確認するためのフィードバックを探しています. 現時点で私が行っていることの簡単な概要は次のとおりです。
入力が空でないこと、または長すぎることを確認してください
SQL インジェクションを防ぐためにクエリ文字列をエスケープする
正規表現を使用して無効な文字を拒否する (これは送信される内容によって異なります)
<script> などの特定の html タグのエンコード (すべてのタグはデータベースに格納されるときにエンコードされ、一部はページでレンダリングするためにクエリが実行されるときにデコードされます)
足りないものはありますか?コード サンプルまたは正規表現を歓迎します。
security - 従来の ASP SQL インジェクション保護
従来の ASP アプリを SQL インジェクションから保護する強力な方法は何ですか?
参考までに、アクセスDBで使用しています。(私はアプリを書きませんでした)
sql - 動的 SQL - 検索クエリ - 可変数のキーワード
従来の ASP 検索エンジンを更新して、SQL インジェクションから保護しようとしています。さまざまな検索パラメーターに基づいてクエリを連結することにより、クエリを動的に構築する VB 6 関数があります。これを、キーワードを除くすべてのパラメーターに対して動的 SQL を使用してストアド プロシージャに変換しました。
キーワードの問題は、ユーザーが提供する可変数の単語があり、キーワードごとに複数の列を検索する必要があることです。キーワードごとに個別のパラメーターを作成することはできないため、安全なクエリを作成するにはどうすればよいでしょうか?
例:
これを処理し、SQL インジェクションからの保護を維持する最善の方法は何ですか?