PHP での安全なプログラミングに関するアドバイス

リリース: 2023-04-07 07:48:01
転載
1735 人が閲覧しました

はじめに

インターネット サービスを提供するには、コードを開発するときに常にセキュリティを意識する必要があります。ほとんどの PHP スクリプトがセキュリティ問題を気にしていない可能性があります。これは主に、この言語を使用する経験の浅いプログラマーが非常に多いためです。ただし、コードの不確実性を理由に、一貫性のないセキュリティ ポリシーを使用する必要がある理由はありません。金銭に関係するものをサーバーに置くと、誰かがそれをハッキングしようとする可能性があります。フォーラム プログラムやあらゆる形式のショッピング カートを作成すると、攻撃される可能性が無限に高まります。

推奨される PHP ビデオ チュートリアル: https://www.php.cn/course/list/29/type/2.html

背景

Web コンテンツのセキュリティを確保するために、一般的なセキュリティ ガイドラインをいくつか示します:

#1. フォームを信頼しないでください

攻撃 フォームはシンプルです。簡単な JavaScript トリックを使用すると、評価フィールドに 1 から 5 までの数字のみを許可するようにフォームを制限できます。誰かがブラウザの JavaScript 機能をオフにしたり、カスタム フォーム データを送信したりすると、クライアント側の検証は失敗します。

ユーザーは主にフォーム パラメータを通じてスクリプトを操作するため、これが最大のセキュリティ リスクとなります。何を学ぶべきですか? PHP スクリプトでは、PHP スクリプトに渡されるデータを常に検証してください。この記事では、ユーザーの資格情報をハイジャックする (またはさらに悪いことに) 可能性があるクロスサイト スクリプティング (XSS) 攻撃を分析し、防御する方法を説明します。データを汚したり破壊したりする可能性のある MySQL インジェクション攻撃を防ぐ方法についても説明します。

2. ユーザーを信じないでください

Web サイトで取得したすべてのデータには有害なコードが含まれていると想定してください。たとえ誰もあなたのサイトをハッキングしようとしないと信じている場合でも、すべての部分をクリーンアップしてください。

3. グローバル変数をオフにする

最大のセキュリティ ホールは、

register_globals 設定パラメータを有効にしてしまうことです。幸いなことに、PHP 4.2 以降では、この設定はデフォルトで無効になっています。 register_globals がオンになっている場合は、php.ini ファイルの register_globals 変数を Off に変更することでこの機能をオフにできます。

register_globals = Off
ログイン後にコピー

初心者プログラマは、登録するのが面倒だと感じています。 globals 変数は便利ですが、この設定がどれほど危険であるかを理解していません。グローバル変数が有効になっているサーバーは、任意の形式のパラメータをグローバル変数に自動的に割り当てます。それがどのように機能するのか、そしてなぜ危険なのかを理解するために、例を見てみましょう。

フォーム データをデータベースに挿入する

process.php というスクリプトがあるとします。最初の形式は次のようになります。

<input name="username" type="text" size="15" maxlength="64">
ログイン後にコピー

process.php を実行すると、登録されたグローバル変数が有効になっている PHP はパラメータを $username 変数に割り当てます。これにより、$_POST['username'] または $_GET['username'] を介してアクセスする場合に比べて、キーストロークが節約されます。残念ながら、これにはセキュリティ上の問題も残ります。変数を明示的に初期化せず、誰も初期化したくない場合、PHP は GET または POST パラメータを介してスクリプトに送信される値に変数の値を設定するからです。それを運用するには大きな問題が発生します。

下のスクリプトを見てください。

$authorized 変数の値が true の場合、検証されたデータがユーザーに表示されます。通常、$authorized 変数の値は、ユーザーがこの仮想の authenticated_user() 関数検証に正しく合格した場合にのみ true に設定されます。ただし、register_globals を有効にすると、誰でも authorized=1 などの GET パラメータを送信してオーバーライドできます。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;?php // Define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } ?&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div><p>这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为<code> $_POST 的大数组中,所有的 GET 数据都保存在 $_GET 大数组中。文件上传信息保存在一个称为 $_FILES 的特殊数据中。另外,还有一个称为 $_REQUEST 的复合变量。

要从一个 POST 方法表单中访问username字段,可以使用 $_POST[&#39;username&#39;]。如果 username 在 URL 中就使用$_GET[&#39;username&#39;]。如果你不确定值来自哪里,用 $_REQUEST[&#39;username&#39;]

<?php
$post_value = $_POST[&#39;post_value&#39;];
$get_value = $_GET[&#39;get_value&#39;];
$some_variable = $_REQUEST[&#39;some_value&#39;]; 
?>
ログイン後にコピー

$_REQUEST $_GET$_POST、和 $_COOKIE 数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookiePOST、然后是 GET

以上就是为大家整理的一些编程安全建议。更过相关问题请访问PHP中文网:https://www.php.cn/

以上がPHP での安全なプログラミングに関するアドバイスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:开发者头条
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート