ホームページ > バックエンド開発 > PHPチュートリアル > SQLインジェクションを防ぐにはどうすればよいでしょうか?

SQLインジェクションを防ぐにはどうすればよいでしょうか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-06 13:53:27
オリジナル
946 人が閲覧しました

  1. 昨夜11時過ぎ、友人が突然私のところに来て、会社のWebサイトの脆弱性がwooyunに報告されたと言いました。 (その後、私はその女の子からこの脆弱性について簡単に学びました。追記:その女の子は php プログラマーです)

  2. wooyunには2つの脆弱性が提出されており、1つはSQLインジェクション(理解すると、彼らの会社が使用しているフレームワークは11年前のフレームワーク、またはmysql_query()古いmysql関数です)もう1つはCookieの問題です。少女はユーザーの UID とその他の機密情報を Cookie に書き込みました、2333。次に、PHP がビジネス ロジックを処理するために使用する uid も Cookie 233333 から取得されます (これにより、Cookie を変更した後に任意のユーザーに偽装できるようになります)

  3. 私は彼女に SQL インジェクションの解決策を話しました (最初の解決策は根本原因ではなく症状を治療すること、正規表現を使用して SQL ステートメントを照合すること、危険な文字、キーワード、エスケープ記号をフィルタリングすること、2 つ目の解決策は古いものを放棄することですmysql 関数を使用し、PDO または mysqli を使用します) (Cookie の抜け穴については、uid などの機密情報をセッションに保存し、セッション ID を暗号化して Cookie に入れることをお勧めします)

  4. その女の子は最終的に、会社のフレームワークの mysql ドライバーを変更するのは非現実的だったので、不正な文字列をフィルタリングするために通常の SQL ステートメントを使用する必要があると言いました。

  5. オンラインで SQL ステートメント フィルタリング関数を見つけました。これらは非常に便利な SQL フィルタリング関数として知られています
  6. Zhihu おばさんからの回答


  7. SQL インジェクションを防ぐ方法について話し合いたいのですが、SQL インジェクションと SQL ステートメントをフィルタリングするための便利な関数はありますか? よろしくお願いします。

返信内容:

昨夜11時過ぎ、友人が突然私のところに来て、会社のWebサイトの脆弱性がwooyunに報告されたと言いました。 (その後、私はその女の子からこの脆弱性について簡単に学びました。追記:その女の子は php プログラマーです)
  1. wooyunには2つの脆弱性が提出されており、1つはSQLインジェクションです
  2. (理解すると、彼らの会社が使用しているフレームワークは11年前のフレームワーク、または
  3. 古いmysql関数です)

    もう1つはCookieの問題です。少女はユーザーの UID とその他の機密情報を Cookie に書き込みました、2333。次に、PHP がビジネス ロジックを処理するために使用する uid も Cookie 233333 から取得されます (これにより、Cookie を変更した後に任意のユーザーに偽装できるようになります)mysql_query()

    私は彼女に SQL インジェクションの解決策を話しました (最初の解決策は根本原因ではなく症状を治療すること、正規表現を使用して SQL ステートメントを照合すること、危険な文字、キーワード、エスケープ記号をフィルタリングすること、2 つ目の解決策は古いものを放棄することですmysql 関数を使用し、PDO または mysqli を使用します) (Cookie の抜け穴については、uid などの機密情報をセッションに保存し、セッション ID を暗号化して Cookie に入れることをお勧めします)
  4. その女の子は最終的に、会社のフレームワークの mysql ドライバーを変更するのは非現実的だったので、不正な文字列をフィルタリングするために通常の SQL ステートメントを使用する必要があると言いました。
  5. オンラインで SQL ステートメント フィルタリング関数を見つけました。これらは非常に便利な SQL フィルタリング関数として知られています

    Zhihu おばさんからの回答

  6. SQL インジェクションを防ぐ方法について話し合いたいのですが、SQL インジェクションと SQL ステートメントをフィルタリングするための便利な関数はありますか? よろしくお願いします。

  7. なぜ前処理を使用しないのでしょうか? ? ? ? ? ? ? ? ? ?

前処理を使用しないのはなぜですか? ? ? ? ? ? ? ? ? ?

前処理を使用しないのはなぜですか? ? ? ? ? ? ? ? ? ?
大事なことは3回言ってください!
SQL インジェクションはすでに前世紀のものです。
書き直したくない場合は、単純にパッケージ化された既製の PHP クラスを使用できます。そのうちの 1 つを選択して使用してください。 (コードに私のプロジェクトの痕跡があることが判明したので、無関係なコードを削除しました) MySQLi バージョン:
リーリー PDO_MYSQL バージョン: リーリー
使用方法:
リーリー

注意! ! ! SQL ステートメントは、クエリ対象のパラメータを置き換えるために ? を使用します。 ! ! SQL インジェクションの脆弱性は、変数を SQL ステートメントに結合することによって引き起こされます。 ! !

追伸: 枠組みを変えることができないなら、時間はルールや時代遅れのテクノロジーに固執する人々を排除するだけです。

通常のフィルタリング SQL ステートメントによって SQL インジェクションが完全に排除されるとは期待しないでください。PHP7 が MySQL 拡張機能を放棄した理由は、この拡張機能にセキュリティ ホールがあるからです。


以前に同様の概要を書いたので、ここではコピーしません。一般的に使用される Web セキュリティ防止に関する提案が含まれています (後で省略した部分を追加し続けます)。参照してください: PHP セキュア コーディング
簡単に理解すると、前処理に PDO を使用できる場合は PDO を使用し、PDO を使用できない場合は先頭に addslashes を使用します。

PHP システム関数にはこの addlashes() があり、試してみることができます

通常のフィルタリングを使用しない場合は、エスケープすることを検討してください。

実際、SQL インジェクションに対する防御の本質は、GPC 外部変数内の機密文字をエスケープまたはインターセプトすることです。 GPC はフレームワーク エントリ ファイルまたはルーティング分析クラスで前処理して、その後のビジネス用途に使用できます。これは実装が比較的簡単で簡単です。 Cookie に関しては、大幅な変更を加えて、Cookie をチェックするためにいくつかの暗号化メソッドを使用します。暗号化キーをセッションに配置できます。

さて、このものの姿勢は次のようになります:

  1. Accelerator などのセキュリティ サービスを外部に追加します (Accelerator を使用します。応答は通常 100 ミリ秒長く、時折変動します。セキュリティは基本的なもののみで、一部の投稿と一部の XSS は傍受できません)

  2. サーバーに Web アプリケーション ファイアウォール ソフトウェアをインストールします

  3. 時間を見極め、ゆっくりとPDOに移行し、クエリにはパラメータバインディングを使用します(個人的には、変更が許可されていないのではなく、調整に時間がかかると考えています)

PHP>=5.5が廃止されたmysql_*ので、互換性を確保するために時間をかけてフレームワークを再構築する必要があります。

www.oneasp.comをお試しください

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート