昨夜11時過ぎ、友人が突然私のところに来て、会社のWebサイトの脆弱性がwooyunに報告されたと言いました。 (その後、私はその女の子からこの脆弱性について簡単に学びました。追記:その女の子は php プログラマーです)
wooyunには2つの脆弱性が提出されており、1つはSQLインジェクション(理解すると、彼らの会社が使用しているフレームワークは11年前のフレームワーク、またはmysql_query()
古いmysql関数です)もう1つはCookieの問題です。少女はユーザーの UID とその他の機密情報を Cookie に書き込みました、2333。次に、PHP がビジネス ロジックを処理するために使用する uid も Cookie 233333 から取得されます (これにより、Cookie を変更した後に任意のユーザーに偽装できるようになります)
私は彼女に SQL インジェクションの解決策を話しました (最初の解決策は根本原因ではなく症状を治療すること、正規表現を使用して SQL ステートメントを照合すること、危険な文字、キーワード、エスケープ記号をフィルタリングすること、2 つ目の解決策は古いものを放棄することですmysql 関数を使用し、PDO または mysqli を使用します) (Cookie の抜け穴については、uid などの機密情報をセッションに保存し、セッション ID を暗号化して Cookie に入れることをお勧めします)
その女の子は最終的に、会社のフレームワークの mysql ドライバーを変更するのは非現実的だったので、不正な文字列をフィルタリングするために通常の SQL ステートメントを使用する必要があると言いました。
返信内容:
昨夜11時過ぎ、友人が突然私のところに来て、会社のWebサイトの脆弱性がwooyunに報告されたと言いました。 (その後、私はその女の子からこの脆弱性について簡単に学びました。追記:その女の子は php プログラマーです) もう1つはCookieの問題です。少女はユーザーの UID とその他の機密情報を Cookie に書き込みました、2333。次に、PHP がビジネス ロジックを処理するために使用する uid も Cookie 233333 から取得されます (これにより、Cookie を変更した後に任意のユーザーに偽装できるようになります)mysql_query()
Zhihu おばさんからの回答
SQL インジェクションを防ぐ方法について話し合いたいのですが、SQL インジェクションと SQL ステートメントをフィルタリングするための便利な関数はありますか? よろしくお願いします。
前処理を使用しないのはなぜですか? ? ? ? ? ? ? ? ? ?
大事なことは3回言ってください!
SQL インジェクションはすでに前世紀のものです。
書き直したくない場合は、単純にパッケージ化された既製の PHP クラスを使用できます。そのうちの 1 つを選択して使用してください。 (コードに私のプロジェクトの痕跡があることが判明したので、無関係なコードを削除しました) MySQLi バージョン:
リーリー
PDO_MYSQL バージョン:
リーリー
使用方法:
リーリー
以前に同様の概要を書いたので、ここではコピーしません。一般的に使用される Web セキュリティ防止に関する提案が含まれています (後で省略した部分を追加し続けます)。参照してください: PHP セキュア コーディング
簡単に理解すると、前処理に PDO を使用できる場合は PDO を使用し、PDO を使用できない場合は先頭に addslashes を使用します。
PHP システム関数にはこの addlashes() があり、試してみることができます
通常のフィルタリングを使用しない場合は、エスケープすることを検討してください。
実際、SQL インジェクションに対する防御の本質は、GPC 外部変数内の機密文字をエスケープまたはインターセプトすることです。 GPC はフレームワーク エントリ ファイルまたはルーティング分析クラスで前処理して、その後のビジネス用途に使用できます。これは実装が比較的簡単で簡単です。 Cookie に関しては、大幅な変更を加えて、Cookie をチェックするためにいくつかの暗号化メソッドを使用します。暗号化キーをセッションに配置できます。
さて、このものの姿勢は次のようになります:
Accelerator などのセキュリティ サービスを外部に追加します (Accelerator を使用します。応答は通常 100 ミリ秒長く、時折変動します。セキュリティは基本的なもののみで、一部の投稿と一部の XSS は傍受できません)
サーバーに Web アプリケーション ファイアウォール ソフトウェアをインストールします
時間を見極め、ゆっくりとPDOに移行し、クエリにはパラメータバインディングを使用します(個人的には、変更が許可されていないのではなく、調整に時間がかかると考えています)
PHP>=5.5が廃止されたmysql_*
ので、互換性を確保するために時間をかけてフレームワークを再構築する必要があります。
www.oneasp.comをお試しください