検索
ホームページバックエンド開発PHPチュートリアルPHP プログラマーが犯しやすい 10 の間違いを紹介_PHP チュートリアル

PHPプログラマーは現在、ますます重要なタスクを引き受けるようになっています。 php は優れた Web 開発言語であり、柔軟な言語ですが、私は PHP プログラマーが何度も犯すいくつかの間違いを見てきました。私は、PHP プログラマーが犯しやすい 10 個の間違いのリストを以下に作成しました。そのほとんどはセキュリティに関連しています。あなたがどれだけ間違いを犯したか見てみましょう:

1. HTML エンティティを理解していない

基本的な常識: すべての信頼できない入力 (特にユーザーがフォームから送信したデータ) は出力前に解釈されなければなりません。

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> </span><span class="vars">$_GET</span><span>[</span><span class="string">'usename'</span><span>] ; </span></span></li></ol>

この例では次のように出力される可能性があります:

<script>/*管理者パスワードを変更するスクリプト、または Cookie を設定するスクリプト*/</script>

これは、ユーザーがすべて正しく入力したことを保証しない限り、明らかなセキュリティ リスクです。

修正方法:

正しい方法:

<ol class="dp-c"><li class="alt"><span><span class="func">echo</span><span> htmlspecialchars(</span><span class="vars">$_GET</span><span>[</span><span class="string">'username'</span><span>], ENT_QUOTES); </span></span></li></ol>

2. SQL 入力を無視しないでください

これについては、「The Simplest」という記事で説明しました。 SQL インジェクションを防ぐ方法 (PHP+MySQL で) 質問で、php.ini で magic_quotes がすでに On に設定されているので、これについて心配する必要はない、と誰かが私に言いましたが、すべての入力がそこから来るわけではありません。 $_GET、$_POST、または $_COOKIE わかりました!

修正方法:

SQL インジェクション (php+mysql) を防ぐ最も簡単な方法と同じですが、mysql_real_escape_string() 関数を使用することをお勧めします

正しいアプローチ:

<ol class="dp-c">
<li class="alt"><span><span><?php  </span></span></span></li>
<li>
<span class="vars">$sql</span><span> = “UPDATE users SET  </span>
</li>
<li class="alt">
<span>name=’.mysql_real_escape_string(</span><span class="vars">$name</span><span>).’  </span>
</li>
<li>
<span>WHERE id=’.mysql_real_escape_string (</span><span class="vars">$id</span><span>).’”;  </span>
</li>
<li class="alt">
<span>mysql_query(</span><span class="vars">$sql</span><span>);  </span>
</li>
<li><span>?> </span></li>
</ol>

3. エラー HTTP ヘッダー関連関数を使用してください: header()、session_start()、setcookie()

この警告に遭遇したことがありますか?」 警告: ヘッダー情報を追加できません - ヘッダーはすでに送信されました [....]

毎回 サーバーから Web ページをダウンロードするたびに、サーバーの出力はヘッダーと本文の 2 つの部分に分割されます。

ヘッダーには Cookie などの非視覚データが含まれています。常に頭が最初に到着します。テキスト部分には、ビジュアル HTML、画像、その他のデータが含まれます。

output_buffering が Off に設定されている場合、出力がある前にすべての HTTP ヘッダー関連関数を呼び出す必要があります。問題は、ある環境で開発し、別の環境にデプロイすると、output_buffering 設定が異なる可能性があることです。その結果、リダイレクトが停止し、Cookie とセッションが正しく設定されませんでした。

修正方法:

出力する前に必ず http ヘッダー関連関数を呼び出し、output_buffering = Off に設定してください。

4. ファイルに安全でないデータを使用することを要求するか、含める

繰り返しになりますが、明示的に宣言していないデータは信頼しないでください。 $_GET、$_POST、または $_COOKIE から取得したファイルを含めたり、要求したりしないでください。

例:

<ol class="dp-c">
<li class="alt"><span><span>index.php  </span></span></li>
<li><span>  </span></li>
<li class="alt">
<span class="comment">//including header, config, database connection, etc </span><span> </span>
</li>
<li>
<span class="keyword">include</span><span>(</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>]);  </span>
</li>
<li class="alt">
<span class="comment">//including footer </span><span> </span>
</li>
<li><span>?> </span></li>
</ol>

これで、ハッカーは http://www.yourdomain.com/index.php?filename=anyfile.txt を使用して機密情報を取得したり、PHP スクリプトを実行したりできるようになります。

allow_url_fopen=On の場合、あなたは死んでいます:

次の入力を試してください:

http://www.yourdomain.com/index. … n.com%2Fphphack.php

Web ページに http の出力が含まれていますハッカーはスパムを送信したり、パスワードを変更したり、ファイルを削除したりする可能性があります。想像できるものなら何でも。

修正方法:

どのファイルを include ディレクティブまたは require ディレクティブに含めることができるかを自分で制御する必要があります。

これは簡単ではありますが、包括的ではない修正です:

<ol class="dp-c">
<li class="alt"><span><span>  </span></span></li>
<li>
<span class="comment">//Include only files that are allowed. </span><span> </span>
</li>
<li class="alt">
<span class="vars">$allowedFiles</span><span> = </span><span class="keyword">array</span><span>(’file1.txt’,</span><span class="string">'file2.txt’,'</span><span>file3.txt’);  </span>
</li>
<li>
<span class="keyword">if</span><span>(in_array((string)</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>],</span><span class="vars">$allowedFiles</span><span>)) {  </span>
</li>
<li class="alt">
<span class="keyword">include</span><span>(</span><span class="vars">$_GET</span><span>[</span><span class="string">'filename'</span><span>]);  </span>
</li>
<li><span>}  </span></li>
<li class="alt">
<span class="keyword">else</span><span>{  </span>
</li>
<li>
<span class="func">exit</span><span>(’not allowed’);  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span>?> </span></li>
</ol>

5. 文法エラー

文法エラーには、非常に一般的なため、ここにリストする必要があるすべての語彙および文法エラーが含まれます。解決策は、PHP の構文を注意深く研究し、括弧、中括弧、セミコロン、または引用符を見逃さないように注意することです。また、メモ帳は使用せずに、適切なエディタを見つけてください。

6. オブジェクト指向の使用がほとんど、またはまったくない

多くのプロジェクトでは PHP のオブジェクト指向テクノロジが使用されていないため、コードのメンテナンスに非常に時間と労力がかかります。 PHP はますます多くのオブジェクト指向テクノロジをサポートしており、ますます改良されています。オブジェクト指向テクノロジを使用しない理由はありません。

7. フレームワークを使用しない

PHP プロジェクトの 95% は、作成、編集、リスト、削除という 4 つのことを行っていますが、これら 4 つの作業を実行するのに役立つ MVC フレームワークがたくさんあります。彼ら?

8. PHP にすでにある関数がわからない

PHP のコアには多くの関数が含まれています。多くのプログラマーは何度も車輪の再発明を繰り返します。多くの時間が無駄になりました。コーディングする前に PHP mamual を検索して Google で検索すると新しい発見があるかもしれません。 PHP の exec() は、cmd シェルを実行し、実行結果の最後の行を文字列の形式で返すことができる強力な関数です。セキュリティを考慮して、EscapeShellCmd()

9を使用できます。PHPの古いバージョンを使用してください。

很多程序员还在使用PHP4,在PHP4上开发不能充分发挥PHP的潜能,还存在一些安全的隐患。转到PHP5上来吧,并不费很多功夫。大部分PHP4程序只要改动很少的语句甚至无需改动就可以迁移到PHP5上来。根据http://www.nexen.net的调查
只有12%的PHP服务器使用PHP5,所以有88%的PHP开发者还在使用PHP4.

10.对引号做两次转意

见过网页中出现’或’”吗?这通常是因为在开发者的环境中magic_quotes设置为off,而在部署的服务器上magic_quotes=on. PHP会在 GET, POST 和COOKIE中的数据上重复运行addslashes() 。

原始文本:

<ol class="dp-xml">
<li class="alt"><span><span>It’s a string  </span></span></li>
<li><span>magic quotes on:  </span></li>
<li class="alt"><span>It’s a string  </span></li>
<li><span>又运行一次  </span></li>
<li class="alt"><span>addslashes():  </span></li>
<li><span>It\’s a string  </span></li>
<li class="alt"><span>HTML输出:  </span></li>
<li><span>It’s a string </span></li>
</ol>

还有一种情况就是,用户一开始输入了错误的登录信息,服务器检测到错误输入后,输出同样的form要求用户再次输入,导致用户的输入转意两次!

希望通过以上内容介绍的十方面,能够给你打击来帮助。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445749.htmlTechArticlePHP 程序员现在越来越承担着中重要的任务。 php 是个伟大的web开发语言,灵活的语言,但是看到php程序员周而复始的犯的一些错误。我做了...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

PHPアプリケーションをより速くする方法PHPアプリケーションをより速くする方法May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

PHP依存性インジェクション:コードのテスト可能性を改善しますPHP依存性インジェクション:コードのテスト可能性を改善しますMay 12, 2025 am 12:03 AM

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

PHPパフォーマンスの最適化:データベースクエリの最適化PHPパフォーマンスの最適化:データベースクエリの最適化May 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター