ホームページ >バックエンド開発 >PHPチュートリアル >初心者は、エラー プロンプトをオフにしたり、厳密なデータ検証を行ったりするなど、PHP でセキュリティに関する良い習慣を身につけるべきです。

初心者は、エラー プロンプトをオフにしたり、厳密なデータ検証を行ったりするなど、PHP でセキュリティに関する良い習慣を身につけるべきです。

伊谢尔伦
伊谢尔伦オリジナル
2017-07-17 11:22:421723ブラウズ

Web 開発に PHP を使用する場合は、ユーザーが不注意でさまざまな問題を引き起こさないように、いくつかのセキュリティ設定項目に注意し、特定の機能をオフにする必要があります。

1. phpエラープロンプト機能をオフにする

php.iniでdisplay_errorsをOFFに変更するか、phpファイルの前にerror_reporting(0)を追加します。

error_reporting(0); を使用する 失敗例:

<?php  
error_reporting(0);  
echo 555  
echo 444;  
?>

エラー:

解析エラー: E:webphp2.php の 4 行目で解析エラーが発生しました

多くの phpers error_reporting(0) を使用しても機能しないと述べています。最初の例では、A.php に致命的なエラーがあり、実行が妨げられています。サーバーが実行できない場合、サーバーはこの関数があることを認識していないため、同じエラーが報告されます。

2. いくつかの「悪い機能」をオフにする

1) マジッククオート機能をオフにする

php.ini に magic_quotes_gpc = OFF を設定する
addslashes によるエスケープの繰り返しを避ける

2) register_globals = Off をオフにする

in php .ini set register_globals = OFF

register_globals = ON

<?php  
//$bloger = $_GET[&#39;bloger&#39;]   
//因为register_globals = ON 所以这步不用了直接可以用$bloger  
echo $bloger;  
?>

の場合 この状況では、一部の初期化されていない変数が簡単に変更されてしまい、致命的になる可能性があります。したがって、 register_globals = OFF

(3) に厳密に

ファイルの権限を設定します。

たとえば、アップロードされた画像を含むファイルには実行権限を付与することはできず、読み取りのみが可能です

3. 必要なのは、データフローを厳密に検証して制御することです。ユーザーは 1 億人います。悪いユーザーは致命的になる可能性があり、善良なユーザーでもデータ入力ボックスに誤って中国語を入力すると、うっかり「悪い」ユーザーになってしまうことがあります。

プログラムの安全性と堅牢性を確保するために、データ検証には

(1) 鍵データが存在するかどうかを含める必要があります。例えば、削除されたデータIDが存在するかどうか

(2)
データ型が正しいかどうか。たとえば、削除されたデータ ID が integer(3) データ長かどうか。フィールドが char(10) 型の場合、データ長を決定するために strlen が必要です
(4) データに危険な文字が含まれているかどうか

データベース テーブル作成フィールド char(25) などのデータ長の問題について、ほとんどの PHPer は次のことを考慮します。それは空であり、データ型が正しいかどうかを確認しますが、文字の長さを無視することは、長さを判断するのが怠けているようなものです。

フロントエンドはjsで判定・検証されており、バックエンドは判定・検証する必要がないと思っていました。これは致命的でもありますが、フォームの偽造には数分しかかかりません。これにより、ユーザー エクスペリエンスが向上し、HTTP リクエストが減り、サーバーの負荷が軽減されます。もちろん、正規のユーザーであれば、JS 検証制御下では完璧ですが、phper としては、JS 検証のみを行って別のセキュリティ検証を放棄することはできません。

選択、チェックボックス、ラジオ、ボタンなど、フォームの一部の属性については検証が不足しています。開発者は、Web ページで値と値の範囲 (ホワイトリスト値) を設定しています。正規のユーザーは選択する権利のみを持ち、変更できないため、通常は JS 検証で使用されます。その場合、PHPer はデータを受け入れてバックエンドで検証データを処理するときにデータを検証しません。これは惰性的な考え方であり、あなたは偽善者です。

フォーム内の対応する要素の名前は、データ テーブルのフィールド名と一致しています。たとえば、ユーザー テーブルのユーザー名フィールドは us​​er_name であり、フォーム内のユーザー名入力ボックスも user_name です。これは暴力的なデータベースと何ら変わりません。

以上が初心者は、エラー プロンプトをオフにしたり、厳密なデータ検証を行ったりするなど、PHP でセキュリティに関する良い習慣を身につけるべきです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。