検索
ホームページバックエンド開発PHPチュートリアルfocus magic php xfocus アンチインジェクション情報

ここでは深い技術的な内容はありません。簡単に説明しただけです。 (特に指示がない場合、以下の操作はすべてPHP+MySQL+Apacheの状況に基づいています) さまざまなハッカーが蔓延する今、自分のPHPコードの安全性をどのように実現し、プログラムやサーバーの安全性を確保するかは非常に重要な問題です。私は何気なく PHP のセキュリティに関する情報を調べましたが、あまり多くはなく、少なくとも ASP よりもはるかに少ない (笑) ので、これらの起こり得る状況を防ぐために何かを書きたいと思いました。ここでは深い技術的な内容はありません。簡単に説明しただけです。 (特に指示がない場合、以下の操作は PHP+MySQL+Apache に基づいています)
まずセキュリティの問題について話しましょう:
http://www.xfocus.net/articles/ 200107 /227.html
http://www.xfocus.net/articles/200107/228.html
上記の記事は、Security Focus の PHP セキュリティに関する記事であり、基本的には PHP に関するいくつかのセキュリティ問題を包括的に紹介しています。
PHP でコーディングする場合、いくつかの基本的なセキュリティの問題を考慮する場合、まず次のことを行います:
1. 変数を初期化します
なぜそう言えるのでしょうか?次のコードを見てみましょう:
if ($admin)
{
echo 'ログインに成功しました! ';
include('admin.php');
}
else
{
echo 'あなたは管理者ではないため、管理できません。 ';
}
さて、上記のコードが正常に実行されており、問題がないことを確認しましょう。次に、それに不正なパラメータを送信してみましょう。たとえば、私たちのページが http://www.traget.com/login.php である場合、次のように送信します: http://www.target.com/login.php?admin=1、はは、考えてみてください。あなたが直接管理者であるか、直接管理します。
もちろん、おそらくそのような単純な間違いは犯さないでしょうし、いくつかの非常に秘密のエラーもこの問題を引き起こす可能性があります。たとえば、最近公開された phpwind 1.3.6 フォーラムには、直接攻撃できる脆弱性があります。管理者権限を取得します。初期化されていない $skin 変数があるため、後で一連の問題が発生します。
では、上記の問題を回避するにはどうすればよいでしょうか?まず、php.ini から始めて、php.ini で register_global = off を設定します。これは、登録されているすべての変数がグローバルであるわけではないことを意味するため、これを回避できます。ただし、私たちはサーバー管理者ではないので、コードからしか改善できません。では、上記のコードをどのように改善すればよいでしょうか。これを次のように書き換えます:
$admin = 0; // 変数を初期化します
if ($_POST['admin_user'] && $_POST['admin_pass'])
{
// 送信された管理者のユーザー名とパスワードが正しいかどうかを判断します対応する処理コード
//...
$admin = 1;
}
else
{
$admin = 0;
}
if ($admin)
{
echo 'ログイン成功! ';
include('admin.php');
}
else
{
echo 'あなたは管理者ではないため、管理できません。 ';
}
次に、最初に変数を $admin = 0 に初期化しているため、この時点で http://www.target.com/login.php?admin=1 を送信しても機能しません。この脆弱性を利用して管理者権限を取得することはできません。
2. SQL インジェクション (SQL インジェクション) を防ぐ
SQL インジェクションは、基本的に過去 2 年間で国内で普及したテクノロジである asp から php までを含め、現時点で最も有害なプログラムである必要があります。送信された変数の不一致により、フィルタリングにより注入ポイントが形成され、悪意のあるユーザーが SQL クエリ ステートメントを送信できるようになり、その結果、重要なデータが盗まれたり、データが失われたり破損したり、バックエンド管理に侵入されたりする可能性があります。
基本原則については説明しません。理解するために次の 2 つの記事を見てみましょう:
http://www.4ngel.net/article/36.htm
http://www.4ngel.net/ Article/ 30.htm
基本的なインジェクション侵入方法を理解したところで、どうすればそれを防ぐことができるでしょうか?コードから始めましょう。
Web 上でデータを送信するには 2 つの方法があることがわかっています。1 つは get で、もう 1 つは post です。そのため、一般的な SQL インジェクションの多くは get メソッドから始まり、SQL がないため、インジェクション ステートメントにはいくつかの SQL ステートメントが含まれている必要があります。 SQL ステートメントには、select、update、delete、insert という 4 つの主要な文があります。では、送信するデータをフィルタリングすれば、これらの問題を回避できるでしょうか。
そこで、正規表現を使用して次の関数を構築します:
/*
関数名: inject_check()
関数関数: 送信された値に SQL インジェクション文字が含まれているかどうかを検出し、インジェクションを防止し、サーバーのセキュリティを保護します
パラメータ: $sql_str: 送信変数戻り値: テスト結果を返します (ture または false)
関数作成者: heiyeluren
*/
Function inject_check ($ SQL_STR) {
Return EREGI ('Select | UPDATE | DEELETE | '|/*|* |../| ./|union|into|load_file|outfile', $sql_str); // フィルター
}
関数では、select、insert、update、delete、union、into、load_file、outfile /*, ./ , ../ 、 ' およびその他の危険なパラメーター文字列がすべてフィルターで除外されると、送信されたパラメーターを次のように制御できます。
if (inject_check($_GET['id']))
{
exit('データ送信したデータは違法です。確認して再送信してください。');
}
else
{
$id = $_GET['id'];
echo '送信されたデータは合法です。続行してください。 ';
}
?>
URL を http://www.target.com/a.php?id=1 として送信すると、次のメッセージが表示されます。
「送信されたデータは合法です。続行してください。」 "
http://www.target.com/a.php?id=1' select * from tb_name を送信すると、次のプロンプトが表示されます: 「送信したデータは違法です。確認して再送信してください!」
次に、当社の要求を達成しました。
ただし、問題はまだ解決されていません。 http://www.target.com/a.php?id=1asdfasdfasdf を送信すると、上記のルールには準拠しますが、要件を満たさないため、他の状況をチェックする関数を構築します:
/*
関数名: verify_id()
関数関数: 送信された ID クラス値が正当かどうかを検証します
パラメータ: $id: 送信された ID 値
戻り値: 処理された ID を返します
関数作成者: heiyeluren
*/
function verify_id($id=null)
{
if (!$id) { exit('パラメータが送信されていません!') } // 空かどうかの判定
elseif (inject_check( $id)) { exit('提出されたパラメータが不正です!'); } // インジェクションの判定
elseif (!is_numeric($id)) { exit('提出されたパラメータが不正です ! '); } // 数値判定
$id = intval($id); // 整数化
return $id;
なるほど、それなら検証できるので、上記のプログラムコードは次のようになります:
if (inject_check($_GET[' id']))
{
exit('送信したデータは不正です。確認して再送信してください!')
}
else
{
$id = verify_id($_GET['id']); $id をフィルターするためにここでフィルター関数が引用されています
echo '送信されたデータは合法です。続行してください! ';
}
?>
さて、問題はここで解決されたようですが、郵送で送信されたデータ、つまり大量のデータについては考慮しましたか?
たとえば、「 _ 」、「 % 」などの一部の文字はデータベースに害を及ぼす可能性があります。これらの文字は特別な意味を持っているため、これらを制御するとどうなるでしょうか?もう 1 つのポイントは、php.ini で magic_quotes_gpc = off の場合、データベース ルールに準拠していない送信されたデータの前に ' ' が自動的に追加されないことです。そこで、これらの問題を制御する必要があるため、次の関数を構築します。 /*
関数名: str_check()
関数関数: 送信された文字列をフィルタリングする
パラメータ: $var: 処理する文字列
戻り値: フィルタリングされた文字列を返す
関数作成者: heiyeluren
*/
function str_check( $str )
{
if (!get_magic_quotes_gpc()) // magic_quotes_gpc が開いているかどうかを判断します
{
$str = addlashes($str); // フィルター
}
$str = str_replace ("_", "_", $ str); // '_' を除外します。 $str = str_replace("%", "%", $str); // '%' を除外します。 return $ str;サーバーが侵害される危険性があります。
最後に、投稿や記事やニュースの作成など、大量のデータを送信することを検討します。上記の関数に基づいて、次の関数を構築します。
/*
関数名。 : post_check()
Function 関数: 送信された編集コンテンツを処理する
パラメータ: $post: 送信されるコンテンツ
戻り値: $post: フィルターされたコンテンツを返す
関数作成者: heiyeluren
*/
function post_check($post)
{
if (!get_magic_quotes_gpc()) // magic_quotes_gpc が開いているかどうかを判断します
{
$post =addslashes($post) // magic_quotes_gpc が開いていない場合は送信されたデータをフィルターします
}
$post = str_replace("_", "_", $post); // '_' をフィルタリングします
$post = str_replace("%", "%", $post) // ' % ' をフィルタリングします
$post = nl2br($post); ); // 変換を入力します
$post= htmlspecialchars($post); // HTML タグの変換
return $post;
笑、基本的には、一度説明したとおりです。少なくとも 2 つの側面についてしか話していないので、セキュリティ全体についてはほとんど内容がありません。次回は、PHP のセキュリティ構成や Apache の安全性などについてさらに話すことを検討します。全体として最も安全です。
最後に、私が上で表現したことをお話ししましょう: 1. 変数を初期化します 2. 変数をフィルターすることを忘れないでください

上記では、フォーカス マジックのコンテンツを含む、フォーカス マジック php xfocus のアンチインジェクション情報を紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

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

SecLists

SecLists

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール