Flex / PHP セキュリティの基本
http://active6.com/blog/flex/flex-php-security-basics-part-one/
私は何年も Flash / PHP Web サイトとアプリケーションを作成してきましたが、比較的初心者です。フレックス。今週初めに Flex 用の Adobe PHP サンプルを閲覧した後、このコードの一部が公開 Flex サイトで使用されると非常に危険である可能性があることに気付かずにはいられませんでした。これは批判ではありませんが、これらの例は PHP と Flex をタンデムで使用したい人ならほぼ誰でも読むことになるため、セキュリティの基本を復習するのはおそらく悪いことではありません。私はただ PHP が大好きです。これは、動的なサイトとアプリケーションのバックエンドを迅速に開発するのに最適な言語です。 Flex 2 の RIA パワーと組み合わせると、できることは無限に増えます。しかし、すべての Web プログラミング言語と同様、Flex や PHP を使用して最も単純な Web サイトを設計する場合でも、セキュリティに関する考慮事項は非常に重要ですが、見落とされがちです。この記事では、一見しただけでは偏執的な考えが残るかもしれないという前提をいくつか立てていますが、PHP / Flex アプリを開発するときは、次のことに常に留意する必要があります:
Flex または Flash ファイルを逆コンパイルするのは非常に簡単です。ファイル形式は公開されており、多くの逆コンパイラが存在します。 Flex アプリとサーバー間のリクエストと結果を監視することも同様に簡単です。これと上記により、PHP スクリプトの URI と予期されるパラメータを簡単に取得できるようになります。ほとんどの Flex/PHP タンデム アプリケーションは、クリーンでシンプルな XML データを期待して返します。このデータは簡単に解析して、セキュリティ ホールが悪用される可能性があるかどうかを確認できます。多くの PHP 機能はセキュリティ ホールにつながる可能性があります。 PHP.net サイトおよび独立したセキュリティ イニシアチブ (phpsec.org、PHP セキュリティ コンソーシアムなど) は、次々と発生する数十の「重大なセキュリティ上の間違い」を特定しました。この記事では、Flex の観点からこれらについて説明します。考えられるそれぞれの欠陥を理解することは、PHP アプリケーションで同じ間違いを犯さないようにするのに役立ちます。
未検証のユーザー入力これは偏執的に思えるかもしれませんが、Web 開発における最も重要な経験則の 1 つは、ユーザーが送信したデータはすべて考慮されるべきであるということです。潜在的に悪意があるものとして。これを無視すると、これからレビューするほとんどの悪用につながります。ログインパネルを構築したいとします。不要なレイアウト コードを削除しました:
[viewcode] src="flexsecurity/flexapp.xml" link="no" showsyntax="no" geshi="actionscript"[/viewcode]
ご覧のとおり、 Flex アプリは、ログイン検証のためにユーザー ID とパスワードを PHP スクリプトに送信します。どれもかなり標準的なものだと思いませんか?
SQL インジェクションSQL インジェクションは、本質的には検証されていないユーザー入力です。データベースクエリの悪用が可能になります。たとえば、受け取った Flex アプリのユーザー ID/パスワード セットをユーザー テーブルと照合します。 MySQL では、これは次のようになります:
SELECT * FROM users WHERE userid='$userid' AND password='$password';
悪意のあるユーザーは、ユーザー ID として「admin」を入力し、パスワードとして次の情報を入力する可能性があります:
' OR '1'='1
これにより、次のクエリが生成されます:
すごいです
これにより、パスワードの検証がバイパスされます。ユーザーは管理者としてのエントリを取得しました!
送信された値から悪意のあるエントリを無効化する必要があります。多くの PHP インストールでは、これは php.ini ファイルの magic_quotes_gpc 設定によってすでに処理されています。これは、phpinfo() 関数を使用して確認できます。マジック クオートがオフに設定されている場合は、PHP の addlashes() 関数を使用する必要があります:
SELECT * FROM users WHERE userid='admin' AND pass='' OR '1'='1';
ただし、この設定を有効にすると、残念な副作用が 1 つあります。PHP スクリプトに返されるすべての値は、スラッシュが追加されました。何が最適な設定であるかについてはここでは説明しません。それは実際に構築しているシステムに依存するからです。 (詳細については、PHP ドキュメントを確認してください)。
経験則として、magic_quotes_gpc のステータスを常に確認し、オンになっている場合は、すべての入力を PHP のtripslashes() 関数に渡します。次に、データベース クエリで使用する値に addslashes() を適用します。
$userid = addslashes($_REQUEST['userid']); $password = addslashes($_REQUEST['password']);
}
SQL インジェクションにより、悪意のあるユーザーがデータベース レコードにアクセスすることもできます。クエリで使用されるデータの文字 '",;() や、「FROM」、「LIKE」、「WHERE」などのキーワードを常にチェックしてください (大文字と小文字は区別されません)。
シェル コマンド インジェクション上記で説明したようにユーザー ログイン コードを保護したと仮定します。ユーザーがログインすると、Flex アプリは、たとえば、search という変数を通じてユーザーがアップロードしたファイルのリストを要求することができます。物事のフレックス面は上記の例と似ているので、繰り返しません。 PHP スニペットは次のようになります:
[viewcode] src="flexsecurity/phpdir.txt" link="no" showsyntax="no" geshi="php"[/viewcode]この PHP コードは安全ではありません。 $_REQUEST 変数は検証なしで割り当てられます。悪意のあるユーザーは、「;rm -rf *」のような内容を追加し、Web サイトのフォルダーを削除する可能性があります。ユーザー入力が有効であり、期待されたもの以外のものがないことを確認する必要があります。これには、Flex ベースの検証だけを使用しないでください。ハッカーが簡単に利用して、Flex ファイルの変更を許可する HTTP モニターや SWF デコンパイラーが多数存在します。ユーザーが提供する情報が有効であることを確認するには、次のように PHP コードを追加する必要があります:
[viewcode] src="flexsecurity/phpsecdir.txt" link="no" showsyntax="no" geshi="php"[ /viewcode]
escapeshellcmd() は、シェル コマンドを騙して任意のコマンドを実行させるために使用される可能性のある文字列内の文字をエスケープします。
OK、これでこの記事の最初の部分は終了です。パート 2 では、エラー報告やセーフ モードなど、その他の潜在的なセキュリティ ホールについて説明します。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...
