クロヌルや混oticずした集䞭ク゚リからサむトを保護する

画像








激しいカオスリク゚ストは、サヌバヌずトランスポヌトチャネルに倧きな負荷をかけ、サむトの速床を倧幅に䜎䞋させたす。 スキャンの助けを借りお、サむバヌ犯眪者はサむトのコンテンツをコピヌし、その保護の匱点を特定し、かなりの損害を匕き起こしたす。 さらに、クロヌル䞭に行われたサむト芁求もパフォヌマンスに悪圱響を及がしたす。 ほずんどの堎合、サむトの動䜜が遅いずいう問題は、トラフィックの倚い倧芏暡なポヌタルに関係しおいたす。 ただし、トラフィックが少ない堎合でも、サむトは高いトラフィックにさらされる可胜性があるため、小芏暡サむトに圱響を䞎える可胜性がありたす。 高負荷は、サむトを垞にクロヌルするさたざたなロボットによっお䜜成されたす。 同時に、サむトの速床が倧幅に䜎䞋するか、たったく利甚できない堎合がありたす。



サむトは 、プログラム、サヌドパヌティのサむト、たたは手動でスキャンされたす。 これにより、短時間で倧量のリク゚ストが䜜成されたす。 サむトスキャンは、ほずんどの堎合、脆匱性の怜玢やサむトコンテンツのコピヌに䜿甚されたす。



サむトをスキャンから保護するためのかなり効果的な手段は、サむトリ゜ヌスぞのアクセス暩の制限です。 サむトの構造に関する情報は、Apacheモゞュヌルmod_rewriteの倉曎リンクを隠すのに圹立ちたす。 たた、リンクスキャンを無効にし、同時に負荷を枛らすには、1人のナヌザヌから頻繁に送信されるリク゚スト間の時間遅延を蚭定するず圹立ちたす。 スキャンや混chaずした集䞭リク゚ストに察する効果的な保護を維持するには、Webリ゜ヌスの定期的な監査が必芁です。



激しいカオスリク゚ストは、ナヌザヌたたはロボットからサむトペヌゞぞの短時間のランダムたたは悪意のある耇数のリク゚ストです。 たずえば、ランダムに集䞭する芁求には、頻繁なペヌゞ曎新が含たれたす。 悪意のある倚数のリク゚ストには、ナヌザヌによるサむトのペヌゞ䞊のスパムやDoS攻撃が含たれたす。 æ··oticずした集䞭芁求には、ブルヌトフォヌスによるパスワヌド遞択の方法も含たれたす。 パスワヌドは手動で、たたは特別なプログラムを䜿甚しお遞択できたす。 手動パスワヌドは、可胜なオプションがわかっおいる堎合にのみ遞択されたす。 それ以倖の堎合、ログむンずパスワヌドのペアを自動的に遞択する特別なプログラムが䜿甚されたす。 ブルヌトフォヌスのためのプログラム。



æ··oticずした集䞭リク゚ストからサむトを保護する効果的な方法には、特定の時間間隔でのリク゚スト間の遅延時間の蚭定、ブラックリストずホワむトリストの䜜成、 robots.txtファむルのサむトペヌゞリク゚スト間の怜玢゚ンゞンの遅延時間の蚭定、 サむトマップファむルのペヌゞ曎新呚期の蚭定が含たれたす.xml



クロヌルや混 oticずした集䞭リク゚ストからサむトを保護する方法の1぀を実装したした。これは、䞀定期間内のリク゚スト数をカりントし、蚭定されたしきい倀を超えた堎合の遅延時間を蚭定するこずです。 特に、この方法では、ブルヌトフォヌスに費やす時間が長すぎるため、ブルヌトフォヌスでパスワヌドを解読するこずは効果的でなく、圹に立たなくなりたす。 内郚の準備ができおいるphpスクリプト。



1.実装されたphpスクリプトのデヌタ



珟圚、実際には、むンタヌネットリ゜ヌスにある情報を含むコンピュヌタヌ情報を保護するために、さたざたなアプロヌチが䜿甚されおいたす。 これらのアプロヌチは、次の特性によっお定矩できたす。

-䞀般的なコンピュヌタセキュリティを確保するための最新の芁件開発者が提䟛するものを決定する芁件によっお芏制されおいる、すべおの保護メカニズムのセットずパラメヌタヌの䞡方に察する正匏な芁件の存圚;

-コンピュヌタヌ情報を保護するプロセスで実装される実際の保護メカニズムの存圚。 Webサヌバヌで䜿甚されるほずんどのスクリプトがオペレヌティングシステムに組み蟌たれたセキュリティメカニズムを䜿甚するか、それらで䜿甚されるメ゜ッドを継承するずいう単玔な理由により、これらの保護メカニズムは、たずオペレヌティングシステムに組み蟌たれたセキュリティ機胜を含みたす。 これらのメカニズムずそこで䜿甚される方法に基づいお、Webサヌバヌ党䜓の党䜓的な保護レベルが決定されたす。

-コンピュヌタヌ情報のセキュリティに察するさたざたな脅嚁の既存の統蚈。 特に、これは、すでに実行された情報リ゜ヌスに察する攻撃の成功に関するデヌタです。 これらの統蚈を維持するこずは、Webサヌバヌで保護を䜜成するための芁件のレベルを評䟡するだけでなく、保護察策の効果を刀断するのに圹立぀ように蚭蚈されおいたす。



既に述べたように、サむトのクロヌルに察凊する最も効果的な方法は、すべおの皮類の混oticずした集䞭的なリク゚ストず同様に、同じナヌザヌからのリク゚スト間に時間遅延を蚭定するこずです。 ナヌザヌを識別するずきは、Cookieを簡単に削陀できるずいう理由で、ナヌザヌのIPアドレスに重点を眮く必芁がありたす。 もちろん、ナヌザヌのIPアドレスが動的な堎合は、プロキシサヌバヌを䜿甚したり、再接続したりしお、ナヌザヌのIPアドレスを倉曎するこずもできたすが、そのような操䜜にはかなり時間がかかりたす。キュヌは攻撃者のすべおの努力を無効にしたす。



このサむト保護の方法は、phpスクリプトを䜜成しお実装する必芁がありたす。 この皮のスクリプトを䜿甚するず、クロヌラヌプログラムを䜿甚したサむトのスキャンからの保護に圹立ち、同時にサむトのクロヌルを「手動で」倧幅に遅くするのに圹立ちたす。 さらに、このようなスクリプトを䜿甚するず、さたざたな皮類の混chaずした集䞭的な芁求からサむトのすべおのペヌゞに優れたセキュリティが提䟛され、Webサヌバヌ機噚の負荷を枛らすこずができたす。



開発したスクリプトは構成できるはずです。 特に、スクリプトパラメヌタの䞀郚を事前に倉曎する可胜性を予枬する必芁がありたす。 蚀い換えれば、スクリプトには次のものが必芁です。

-ナヌザヌのIPアドレスをブロックする時間を構成する機胜。

-ナヌザヌアクティビティをチェックする時間間隔、぀たり、特定のナヌザヌから受信したリク゚ストの数を保持する時間を蚭定する機胜。

-1人のナヌザヌが特定の時間間隔内にサむトのペヌゞに送信できるリク゚ストの数を蚭定する機胜。

-「垞に蚱可されるIPアドレス」のリストを䜜成する機胜。 このリストに含たれるIPアドレスはブロックされたせん。

-「垞に犁止されおいるIPアドレス」のリストを䜜成する機胜。 スクリプトは、リストされおいるIPアドレスを垞にブロックしたす。



このようなphpスクリプトを䜜成しお䜿甚する利点は次のように考えるこずができたす。

-デヌタベヌスサヌバヌに送信されるリク゚スト数の倧幅な削枛。

-Webサヌバヌでの着信および発信トラフィックの倧幅な節玄。

-スクリプトの最も重芁なパラメヌタヌの䟿利で柔軟な蚭定の可甚性。

-ナヌザヌによるWebサヌバヌの負荷を倧幅に削枛する機胜。

-このリ゜ヌスに十分なペヌゞがある堎合、サむトに投皿されたすべおの情報をコピヌするこずは非垞に困難たたは䞍可胜になりたす。



phpスクリプトの圢匏で䜜成された、開発されたサむトセキュリティシステムのロゞックを図に瀺したす。



画像








スクリプトを開発する過皋で重芁な点は、受信した情報を保存する方法の遞択です。 私たちの堎合、これらは珟圚のナヌザヌのIPアドレスです。 この情報は、デヌタベヌスたたはハヌドドラむブに保存できたす。 開発したスクリプトの䜜業を高速化し、より安定させるために、キャッシュディレクトリを䜿甚しお珟圚のナヌザヌのIPアドレスを保存したす。



これらのディレクトリの1぀に、スクリプトはアクティブのIPアドレスを栌玍したす。この時点で、このディレクトリはアクティブず呌ばれたす。 たた、別のディレクトリに、䞀時的にブロックされたナヌザヌのIPアドレスを含む名前のファむルを远加したすブロックディレクトリ。



IPアドレスに加えお、スクリプトの実行プロセスでは、ナヌザヌアクティビティに関する情報も必芁です。 これを行うために、ナヌザヌが特定の期間に「最初の」アクティビティを瀺したずきに、ナヌザヌのIPアドレスを含むファむルの名前に正確なシステム時間を远加したす。 特定の事前に定矩された期間で初めお、サむトペヌゞにリク゚ストを送信したした。 特定の時間間隔内のナヌザヌがスクリプト内のサむトペヌゞに送信されたリク゚ストの所定数を超える堎合、スクリプトはアクティブナヌザヌのディレクトリからIPアドレスを含むファむルを削陀したす。 次に、ブロックされたIPアドレスを含むディレクトリに、新しいファむルブロックされたナヌザヌのIPアドレスを含む名前を曞き蟌みたす。 したがっお、127.0.0.1_1302615293、195.80.91.151_1302615389、95.30.17.60_1302615457、77.39.54.104_ 1302615504などの名前のファむルは、キャッシュディレクトリアクティブおよびブロックに䞀時的に保存されたす。



䞋郚のスラッシュたでのファむル名にはアクティブなナヌザヌのIPアドレスが含たれ、䞋郚のスラッシュの埌に、ファむル名にアクティブになった぀たり、リ゜ヌスペヌゞにリク゚ストを送信したか、ブロックされた正確なシステム時間が入力されたす。



それずは別に、ディレクトリをキャッシュする堎合、぀たり アクティブフォルダずブロックフォルダでは、ファむルの所有者たたは777のアクセス蚱可を蚭定する必芁がありたす。぀たり、サヌバヌで指定されたこれらのフォルダの属性は、スクリプトに曞き蟌み暩、読み取り暩、実行暩を䞎える必芁がありたす。 すべおのナヌザヌグルヌプに777暩限を蚭定する必芁がありたす。



さらに、サむト管理者が提䟛しない堎合に備えお、別の䟋倖を提䟛する必芁がありたす。 実際、このような状況では、スクリプトは䜿甚できたせん。぀たり、サむトをクロヌルおよび混chaずした集䞭的な芁求から保護するこずは、少なくずも砎産になりたす。 蚀い換えるず、スクリプトの操䜜䞭に、キャッシングディレクトリの読み取りおよび曞き蟌みの機胜の有無を確認するこずが䞍可欠です。



珟圚のナヌザヌに関する情報特にIPアドレスに関する情報は、スヌパヌグロヌバル配列$ _SERVER []から取埗したす。 この配列は、Webサヌバヌによっお䜜成されたす。 さたざたな環境倉数の倀が含たれおいたす。 ナヌザヌのIPアドレスを操䜜するには、$ _SERVER []スヌパヌグロヌバル配列に含たれる次の環境倉数を䜿甚する必芁がありたす。

-$ _SERVER ['HTTP_X_FORWARDED_FOR'];

-$ _SERVER ['HTTP_CLIENT_IP'];

-$ _SERVER ['HTTP_X_CLUSTER_CLIENT_IP'];

-$ _SERVER ['HTTP_PROXY_USER'];

-$ _SERVER ['REMOTE_ADDR']。



環境倉数$ _SERVER ['HTTP_X_FORWARDED_FOR']は、クラむアントがプロキシサヌバヌを䜿甚しおいる堎合、クラむアントのIPアドレスを決定する機䌚を提䟛したす。 環境倉数$ _SERVER ['HTTP_CLIENT_IP']を䜿甚するず、クラむアントがプロキシサヌバヌを䜿甚しおいない堎合、むンタヌネット䞊で動䜜するようにクラむアントのIPアドレスを取埗できたす。 環境倉数$ _SERVER ['HTTP_X_CLUSTER_CLIENT_IP']は、サむトがサヌバヌずクラむアント間の安党な接続を提䟛する暗号化プロトコルSSLを䜿甚しない堎合、クラむアントのIPアドレスを取埗するこずを可胜にしたす。 環境倉数$ _SERVER ['HTTP_PROXY_USER']を䜿甚するず、プロキシサヌバヌを䜿甚するクラむアントのIPアドレスを決定できたす。



環境倉数$ _SERVER ['REMOTE_ADDR']を䜿甚するず、リモヌトナヌザヌのIPアドレスを取埗できたす。 ロヌカルマシンでのテスト䞭、このIPアドレスは127.0.0.1になりたす。 同時に、ネットワヌク䞊で、この倉数は、クラむアントのIPアドレス、たたはナヌザヌが䜿甚した最埌のプロキシサヌバヌこのクラむアントがWebサヌバヌに到達したのIPアドレスを返したす。 したがっお、$ _SERVER []配列のさたざたな環境倉数䞊蚘で䜿甚したすべおの倉数を同時に䜿甚するず、ナヌザヌが䜕らかの方法で「マスク」しようずしおも、ナヌザヌの実際のIPアドレスを特定できたす。たたはプロキシサヌバヌ。



ネストレベルに関係なく、サむトの任意のペヌゞでスクリプトを安定しお動䜜させるために、キャッシングディレクトリアクティブおよびブロックぞのパスを絶察圢匏に枛らす機胜を䜿甚したす。 このアプロヌチを䜿甚するず、サむトの任意のペヌゞからスクリプトを実行でき、ペヌゞの1぀ぞのスクリプトで指定されたキャッシュディレクトリぞの盞察盞察パスが間違っおいるこずがわかりたす。



すでに述べたように、開発されたスクリプトは構成できるはずです。 特に、スクリプトパラメヌタの䞀郚を倉曎する可胜性を予枬する必芁がありたすナヌザヌのIPアドレスをブロックする時間、リ゜ヌスペヌゞに送信されるリク゚ストの数の時間間隔、およびこの時間間隔で蚱可されるリク゚ストの数が考慮されたす。 これらのパラメヌタは、定数を䜿甚しおスクリプトで最初に蚭定されたす。



特に、スクリプト内のこのような定数は、次のパラメヌタヌを瀺したす。

-秒単䜍で瀺されるナヌザヌのIPアドレスのブロック時間const blockSeconds。

-1人のナヌザヌからサむトのペヌゞぞのリク゚ストが考慮される時間間隔。 この間隔も秒単䜍で瀺されたすconst intervalSeconds。

-特定の期間const intervalTimesに1人のナヌザヌが送信できるWebサむトペヌゞぞのリク゚ストの数。

それずは別に、スクリプトでは、文字列デヌタを含むそのような配列を定矩する必芁がありたす。

-「垞に蚱可されるIPアドレスのリスト」に含たれるIPアドレスの倀の配列パブリック配列宣蚀public static $ alwaysActive = array '';

-「垞に犁止されおいるIPアドレスのリスト」に含たれおいるIPアドレスの倀の配列配列public static $ alwaysBlock = array ''の宣蚀。

スクリプトが正しく機胜するため、およびデバッグのために、スクリプト内にいく぀かのフラグが存圚するようにする必芁がありたす。 このようなフラグを䜿甚するず、サむトコンテンツをスキャンやさたざたな混chaずした芁求から保護するプロセスにも圹立ちたす。 これらのフラグは次のずおりです。

-垞にアクティブなナヌザヌに接続する機胜のフラグconst isAlwaysActive。

-垞にブロックされおいるナヌザヌを接続する機胜のフラグconst isAlwaysBlock。

開発したスクリプトには、TBlockIpクラスが1぀含たれおいたす。 このクラスには次のメ゜ッドが含たれたす。

-checkIp。 このメ゜ッドは、ナヌザヌのIPアドレスをブロックたたはアクティビティのためにチェックする機胜を実装したす。 この堎合、「垞に蚱可されるIPアドレス」のリストに含たれるIPアドレスはスキップされ、「垞に犁止されるIPアドレス」のリストに含たれるIPアドレスは逆にブロックされたす。 ナヌザヌIPアドレスが可胜なIPアドレスの配列に芋぀からない堎合、スクリプトは新しいアクティブなIPアドレスの識別子を䜜成したす。

-_getIp。 この方法により、すべおの可胜なIPアドレスから遞択されたナヌザヌの珟圚のIPアドレスを取埗できたす目的のクラむアントIPアドレスが怜出されるたでフィルタリングが実行されたす。 メ゜ッドは受信したIPアドレスを返したす。



最終的に、開発されたスクリプトは、サむトをスキャンするプロセスに察抗するのに圹立぀効果的なツヌルず芋なすこずができ、すべおの皮類の混oticずした集䞭的な芁求に察する予防手段にもなりたす。 開発されたスクリプトでは、同じナヌザヌからのリク゚スト間の時間遅延の蚭定がありたす。 ナヌザヌを識別するずき、䞻な焊点はIPアドレスにありたす。 その理由は簡単です。事実は、攻撃者のコンピュヌタヌからCookieを簡単に削陀できるため、Cookieを䜿甚しおリ゜ヌス保護を構築できないこずです。



もちろん、ナヌザヌのIPアドレスも、たずえばプロキシサヌバヌを䜿甚しお倉曎できたす。 攻撃者に察するこの可胜性を排陀するために、スクリプトは環境倉数を䜿甚したす。環境倉数は、ナヌザヌの実際のIPアドレスを識別するのに圹立ちたす。 ナヌザヌが特定の期間内にサむトのペヌゞぞの芁求の確立された制限を超えるず、このIPアドレスがブロックされたす。 開発されたスクリプトは、スキャンからのサむトの保護、および混chaずした集䞭リク゚ストからの保護に関連する、割り圓おられたすべおの機胜を実行したす。



2リストプログラム





<?php /** *     ip-. */ class TBlockIp { /** *    . */ const blockSeconds = 60; /** *    . */ const intervalSeconds = 15; /** *      . */ const intervalTimes = 3; /** *     . */ const isAlwaysActive = true; /** *     . */ const isAlwaysBlock = true; /** *      . */ const pathActive = 'active'; /** *      . */ const pathBlock = 'block'; /** *     . */ const pathIsAbsolute = false; /** *    . */ public static $alwaysActive = array( '172.16.1.1', ); /** *    . */ public static $alwaysBlock = array( '172.16.1.1', ); /** *   ip-    . */ public static function checkIp() { //  ip- $ip_address = self::_getIp(); //     if (in_array($ip_address, self::$alwaysActive) && self::isAlwaysActive) { return; } //     if (in_array($ip_address, self::$alwaysBlock) && self::isAlwaysBlock) { echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; echo '<html xmlns="http://www.w3.org/1999/xhtml">'; echo '<head>'; echo '<title> </title>'; echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; echo '</head>'; echo '<body>'; echo '<p style="background:#ccc;border:solid 1px #aaa;margin:30px au-to;padding:20px;text-align:center;width:700px">'; echo '   .<br />'; echo '</p>'; echo '</body>'; echo '</html>'; exit; } //     $path_active = self::pathActive; $path_block = self::pathBlock; //        if (!self::pathIsAbsolute) { $path_active = str_replace('\\' , '/', dirname(__FILE__) . '/' . $path_active . '/'); $path_block = str_replace('\\' , '/', dirname(__FILE__) . '/' . $path_block . '/'); } //      if (!is_writable($path_active)) { die('         .'); } if (!is_writable($path_block)) { die('         .'); } //   ip- $is_active = false; if ($dir = opendir($path_active)) { while (false !== ($filename = readdir($dir))) { //  ip +    ip if (preg_match('#^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})_(\d+)$#', $filename, $matches)) { if ($matches[2] >= time() - self::intervalSeconds) { if ($matches[1] == $ip_address) { $times = intval(trim(file_get_contents($path_active . $filename))); if ($times >= self::intervalTimes - 1) { touch($path_block . $filename); unlink($path_active . $filename); } else { file_put_contents($path_active . $filename, $times + 1); } $is_active = true; } } else { unlink($path_active . $filename); } } } closedir($dir); } //   ip- $is_block = false; if ($dir = opendir($path_block)) { while (false !== ($filename = readdir($dir))) { //  ip +    ip if (preg_match('#^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})_(\d+)$#', $filename, $matches)) { if ($matches[2] >= time() - self::blockSeconds) { if ($matches[1] == $ip_address) { $is_block = true; $time_block = $matches[2] - (time() - self::blockSeconds) + 1; } } else { unlink($path_block . $filename); } } } closedir($dir); } // ip-  if ($is_block) { header('HTTP/1.0 502 Bad Gateway'); echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; echo '<html xmlns="http://www.w3.org/1999/xhtml">'; echo '<head>'; echo '<title>502 Bad Gateway</title>'; echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; echo '</head>'; echo '<body>'; echo '<h1 style="text-align:center">502 Bad Gateway</h1>'; echo '<p style="background:#ccc;border:solid 1px #aaa;margin:30px au-to;padding:20px;text-align:center;width:700px">'; echo ' ,   , -    .<br />'; echo '  .  ' . $time_block . ' ()    .'; echo '</p>'; echo '</body>'; echo '</html>'; exit; } //    ip- if (!$is_active) { touch($path_active . $ip_address . '_' . time()); } } /** *    ip-   . */ private static function _getIp() { // ip-   $ip_address = '127.0.0.1'; //   ip- $addrs = array(); //    ip- if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { //   ip-   - foreach (array_reverse(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])) as $value) { $value = trim($value); //  ip- if (preg_match('#^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$#', $value)) { $addrs[] = $value; } } } //  ip- if (isset($_SERVER['HTTP_CLIENT_IP'])) { $addrs[] = $_SERVER['HTTP_CLIENT_IP']; } //  ip- if (isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) { $addrs[] = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; } //  ip- if (isset($_SERVER['HTTP_PROXY_USER'])) { $addrs[] = $_SERVER['HTTP_PROXY_USER']; } //  ip- if (isset($_SERVER['REMOTE_ADDR'])) { $addrs[] = $_SERVER['REMOTE_ADDR']; } //   ip-,    foreach ($addrs as $value) { //  ip- if (preg_match('#^(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})$#', $value, $matches)) { $value = $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4]; if ('...' != $value) { $ip_address = $value; break; } } } //   ip- return $ip_address; } } //   ip- TBlockIp::checkIp();
      
      







このスクリプトは、むンデックスペヌゞに盎接埋め蟌むか、むンデックスファむルの先頭に呌び出しを含めるこずでphpファむルに個別に埋め蟌むこずができたす。



サむトむンデックスファむルでの実装䟋。 むンデックスファむルの最䞊郚に蚘述したすペヌゞ゚ンコヌディングが正しく衚瀺されるように゚ンコヌディングパラメヌタを蚭定した埌に可胜です。

 include '/block/index.php';
      
      







この堎合、ルヌトに「block」フォルダヌ、「active」フォルダヌず「block」フォルダヌ、および「index.php」ファむルを䜜成する必芁がありたすここでは䞊蚘のコヌドをコピヌしたす。



3サむトに埋め蟌たれたphpスクリプトのテスト



蚘述されたコヌドの衚瀺ずその埌のテストは、PHPスクリプトの開発における最も重芁な段階の1぀です。 この段階では、Webのプログラミングに携わる開発者は芋逃しがちです。 実際のずころ、蚘述されたスクリプトを2、3回実行するのは非垞に簡単で、正垞に機胜するこずに泚意しおください。 同時に、これはよくある間違いです。 結局、䜜成されたスクリプトは培底的な分析たたはテストの察象ずなる必芁がありたす。



開発したphpスクリプトずアプリケヌションプログラムの䞻な違いは、非垞に広い範囲の人々がWebアプリケヌションで䜜業するこずです。 このような状況では、さたざたなWebアプリケヌションの䜿甚に完党に粟通しおいるこずをナヌザヌに頌るべきではありたせん。 ナヌザヌに巚倧なガむドやクむックリファレンスを提䟛するこずはできたせん。 そのため、開発されたWebアプリケヌションは、自己文曞化だけでなく、自明でなければなりたせん。 開発したphpスクリプトを実装するずきは、さたざたな状況での動䜜をテストするだけでなく、あらゆる皮類の䜿甚方法を考慮する必芁がありたす。



経隓のあるナヌザヌやプログラマヌにずっお、経隓の浅いナヌザヌが経隓する問題を理解するこずはしばしば困難です。 問題を解決する1぀の方法は、䞀般的なナヌザヌのアクションを代衚するテスタヌを芋぀けるこずです。 過去には、次のアプロヌチが䜿甚されおいたした。最初に、開発されたWebアプリケヌションのベヌタ版が垂堎にリリヌスされたした。 ほずんどの゚ラヌが修正されたず思われる埌、このアプリケヌションは少数のナヌザヌ向けに公開されたため、着信トラフィックの匷床が小さくなりたす。 この皮のテストの埌、開発者は、開発したシステムを䜿甚するためのデヌタずオプションのさたざたな組み合わせを取埗したすが、開発者は[13、394]に぀いおも掚枬したせんでした。



䜜成されたphpスクリプトは、実際に䜜成されたずおりに実行する必芁がありたす。 この䜜業で開発および䜜成されたphpスクリプトに関連しお、これを蚀うこずができたすナヌザヌが特定の期間デフォルトでは15秒、指定されたリク゚スト数デフォルトでは3リク゚スト以䞊をサむトのペヌゞに送信でき、スクリプトがそのIPをブロックしない堎合-アドレス、そしお゚ラヌが曞かれたWebアプリケヌションの仕事に忍び蟌んだ。 䞀般に、テストは、蚘述されたphpスクリプトの予想される動䜜ず実際の動䜜の間に存圚するこのような䞍敎合を特定しようずするアクティビティです。 開発者は、スクリプトの動䜜の䞍敎合ず、開発䞭の䞍正な動䜜を特定するこずにより、ナヌザヌがこの皮のスクリプトの動䜜に遭遇する可胜性を倧幅に枛らすこずができたす。 プログラムこの堎合は、曞かれたphpスクリプトを手動で、たたは専甚のオンラむンサヌビスを䜿甚しおテストできたす。



3.1手動テスト


蚘述されたphpスクリプトを手動でテストする堎合、スクリプトが割り圓おられたタスクを実行するかどうかを確認する必芁がありたす。 特に、特定の期間に頻床が蚱容限床を超えた堎合、同じナヌザヌからのサむトペヌゞぞのリク゚ストの数を制限したすか。 スクリプトのパフォヌマンスをテストするには、たず、サむトコヌドにスクリプトを埋め蟌む必芁がありたす。 これを行うには、次の蚀語構成を䜿甚できたす。

include "block / index.php";



これを含めるず、スクリプトはブロックフォルダヌに配眮されたす。 サむトコンテンツ管理システムが、ペヌゞのいわゆるフレンドリヌURLの䜜成を䜿甚する堎合、぀たり 人間の認識に䟿利なWebアドレスこの堎合、/ news / sport / 2003/10 /などのマルチレベル構造の䜜成、たたはフォルダヌのルヌトずは異なるアドレス/ newsなどでペヌゞをロヌドしたす/sport.php、スクリプトのアドレスを正しく指定する必芁がありたす。 このような状況では、スクリプトぞの絶察パスが瀺される堎合がありたす。



曞かれたphpスクリプトのテスト自䜓は、サむトのペヌゞにリク゚ストを送信するこずで構成されたす。 テストプロセスでは、䜜成されたスクリプトが特定の期間デフォルト-15秒に指定された最倧リク゚スト数デフォルト-3リク゚ストをスキップするかどうかを確認する必芁がありたす。 たず、スクリプトがその䞻な機胜にどのように察凊するかを確認する必芁がありたす。 同じナヌザヌからのサむトペヌゞぞの集䞭的な芁求を盎接ブロックしたす。 サむトのペヌゞに送信できるリク゚ストの数を確認するず、割り圓おられた15秒以内に、サむトのペヌゞに3぀以䞊のリク゚ストを送信するこずはできたせん。 特に、ナヌザヌが3぀以䞊の芁求を送信するず、図に瀺すように、䞀時ロックに関するメッセヌゞを受信したす。



画像








したがっお、テストでは、スクリプトが意図したずおりに機胜するこずが瀺されたした。特定の時間間隔で1人のナヌザヌからのリク゚スト数が指定されたむンゞケヌタヌデフォルト-3リク゚ストを超えるず、特定の時間デフォルトでは1分間ナヌザヌをブロックしたす テストの次の段階は、曞かれたphpスクリプトの個々の機胜の操䜜性を怜蚌するこずです。 特に、テストナヌザヌのIPアドレスが「垞に蚱可されるIPアドレス」のリストに远加された堎合、スクリプトがどのように機胜するかを確認する必芁がありたす。 たた、テストナヌザヌのIPアドレスが「垞に犁止されおいるIPアドレス」のリストに远加された堎合のスクリプトの動䜜を確認する必芁がありたす。



テストナヌザヌのIPアドレスを「垞に蚱可されるIPアドレス」のリストに远加するず、サむトのペヌゞに送信されるリク゚ストの数の制限がなくなり、リンクをたどるたたはペヌゞを曎新するこずができたす。 ぀たり、「垞に蚱可されるIPアドレス」のリストが正しく機胜する必芁がありたす。 テストナヌザヌのIPアドレスを「垞に犁止されおいるIPアドレス」のリストに远加した埌、サむトペヌゞぞの少なくずも1぀の芁求の送信が倱敗したした。 図に瀺すように、Webリ゜ヌスのコンテンツの代わりに、ブラりザにブロッキングメッセヌゞが衚瀺されたす。



画像








぀たり、「垞に犁止されおいるIPアドレス」のリストが実行する必芁がある機胜は正しく機胜しおいたす。 この機胜は、IPアドレスが「垞に犁止されおいるIPアドレス」のリストに含たれおいるナヌザヌを完党にブロックしたす。 したがっお、「垞に蚱可されたIPアドレス」のリストず「垞に犁止されたIPアドレス」のリストを䜿甚しお実装されるアクセス制埡の機胜は正しく動䜜し、スクリプトは圓初の意図どおりに動䜜したす。 ぀たり、このスクリプトは、「垞に蚱可されるIPアドレス」のリストにIPアドレスが含たれるナヌザヌにサむトのペヌゞぞの無制限のアクセスを提䟛し、「垞に犁止されるIPアドレス」のリストにIPアドレスが含たれるナヌザヌぞのアクセスを完党に犁止したす。 曞かれたphpスクリプトを手動でテストするず、スクリプトのすべおの機胜、したがっおスクリプト自䜓が正しく機胜するこずが瀺されたした。 元々考えられおいた通りです。



3.2オンラむンサヌビスを䜿甚したテスト


オンラむンサヌビスを䜿甚しお蚘述されたphpスクリプトをテストするず、サむトのペヌゞを読み蟌むために必芁なトラフィックの正確な量を芋぀けるこずができ、さたざたな自動サヌビスたたはプログラムによっお送信されるリク゚ストの蚘述されたphpスクリプトの「スルヌプット」を正確に決定するのにも圹立ちたす。 スクリプトのタスクの1぀は、クロヌラヌプログラムを䜿甚したスキャンからサむトを保護するこずであるため、最埌のパラメヌタヌは非垞に重芁です。 このようなテストは、必芁なトラフィック量ずプロセッサ時間に぀いおの結論だけでなく、サむトで提瀺された情報が自動モヌドでペヌゞを芁求する゜フトりェアツヌルで利甚可胜かどうかに぀いおも結論を出すのに圹立ちたす。 たず、さたざたな接続速床でのサむトのペヌゞの平均読み蟌み時間を掚定したす。 たた、ナヌザヌがロヌドしたペヌゞのサむズを掚定したす。 この皮のテストを実斜するには、 analyze.websiteoptimization.comにあるオンラむンサヌビスを䜿甚したす。 サヌビスによっお定矩されたロヌド枈みペヌゞのサむズを図に瀺したす



画像








テストするサむトは1ペヌゞのみで構成されおおり、そのサむズは1511バむトであるため、0.51秒56 Kの接続速床たたは0.21秒1.44 Mbpsのナヌザヌ接続速床でロヌドされたす。 。 さたざたなナヌザヌ接続速床でのペヌゞ読み蟌み速床を図に瀺したす。



画像








図の情報からわかるように、最䜎の接続速床14.4 Kでも、サむトのペヌゞは非垞に速く1.4秒でロヌドされたす。 同時に、ナヌザヌの接続速床が非垞に高い堎合特に1.44 Mbps、ペヌゞは文字通り即座に0.21秒でロヌドされたす。 このリ゜ヌスのダりンロヌド速床は、パケット損倱率に合わせお調敎されたすこの比率は0.7です。 たた、ペヌゞの読み蟌みごずに平均0.2秒に等しい遅延時間も考慮に入れたす。 接続速床の倧幅な増加がペヌゞのロヌド時間の同等の倧幅な短瞮に぀ながらない理由を説明するのは、これらのパラメヌタヌです。 このサヌビスは、サむトのペヌゞをロヌドするための䞻芁なパラメヌタヌを評䟡するこずに加えお、サむトの分析の䞀般的な結果、そしおもちろん、サむトのペヌゞをロヌドするためのすべおのパラメヌタヌを改善するこずを目的ずした掚奚事項も提䟛するこずに泚意しおください。 サヌビスの分析結果ず掚奚事項を図に瀺したす



画像








図からわかるように、分析されたすべおのパラメヌタヌのテスト察象サむトのすべおのむンゞケヌタヌは、通垞の制限内にありたす。 特に、このサヌビスでは、サむトペヌゞの数、ペヌゞ䞊のオブゞェクト、およびこれらのペヌゞずオブゞェクトのサむズが蚱容範囲内であるこずを明蚘しおいたす。 サむトは分析されたすべおのパラメヌタヌの基準を満たしおいるため、取埗したデヌタに基づいお、テストしたサむトの最適化は必芁ありたせん。 ぀たり、サむトたたはサむトペヌゞからダりンロヌドされる情報の量は非垞に少なく、Webサヌバヌずナヌザヌの䞡方のリ゜ヌスを節玄できたす。 ぀たり 開発されたスクリプトはサむトをロヌドせず、実際、その存圚は目立ちたせん。 テストを匷調するもの。 サむトのペヌゞの読み蟌み速床、および他のスクリプトの利甚可胜性の確認は、 www.pr-cy.ruなどのオンラむンサヌビスを䜿甚しお実行できたす。 このオンラむンサヌビスを䜿甚しお行われたテストの結果を図に瀺したす。



画像








ご芧のずおり、平均ダりンロヌド速床30.31 Kb / sで取埗したデヌタから、ペヌゞの読み蟌み時間は0.05秒です。 同時に、平均速床37.89 Kb / sでは、ペヌゞの読み蟌み時間はすでに0.04秒です。 同時に、この䜜業で開発されたスクリプトは、同じIPアドレスからのサむトのペヌゞぞの3぀以䞊のリク゚ストをブロックし、それにより䞍必芁な䜜業負荷を枛らし、詊行を耇雑にするか、サむトのパスワヌドを遞択できないようにするこずをテストが瀺したした



3.3サむトに埋め蟌たれたphpスクリプトのテスト結果


テストでは、開発されたphpスクリプトが最初に割り圓おられた機胜にうたく察応しお、サむトをスキャンから保護し、1人のナヌザヌからの混chaずした集䞭的な芁求やブルヌトフォヌス攻撃から保護するこずを瀺したした。 特に、サむトの手動テストでは、特定の時間間隔でのこれらのリク゚ストの数が所定の制限を超えた堎合、スクリプトが1぀のIPアドレスからサむトのペヌゞぞのリク゚ストをブロックするこずが瀺されたした。 さらに、このテストでは、スクリプトのすべおの機胜、特に「垞に蚱可されるIPアドレス」ず「垞に犁止されるIPアドレス」のリストを操䜜する機胜が正垞に機胜するこずが瀺されたした。 ぀たり、開発されたスクリプトは、「垞に蚱可されるIPアドレス」のリストにIPアドレスが含たれるナヌザヌにサむトのすべおのペヌゞぞの無制限のアクセスを提䟛し、「垞に犁止されるIPアドレス」のリストにあるIPアドレスを持぀ナヌザヌぞのアクセスを完党に犁止したす「。



開発されたphpスクリプトが埋め蟌たれおいるサむトのテストでは、分析されたすべおのパラメヌタヌに察するテストされたサむトのすべおのむンゞケヌタヌが通垞の制限内にあるこずが瀺されたした。 特に、このサヌビスでは、サむトペヌゞの数、ペヌゞ䞊のオブゞェクト、およびこれらのペヌゞずオブゞェクトのサむズが蚱容範囲内であるこずを明蚘しおいたす。 サむトは分析されたすべおのパラメヌタヌの基準を満たしおいるため、取埗したデヌタに基づいお、テストしたサむトの最適化は必芁ありたせん。 ぀たり、サむトたたはサむトペヌゞからダりンロヌドされる情報の量は非垞に少なく、Webサヌバヌずナヌザヌの䞡方のリ゜ヌスを節玄できたす。 以前は、スクリプトは英語ず英語の単語を孊習するためのサむトで䜿甚されおいたしたが、埌でより深刻な保護察策が講じられたした。 ただし、最初は、このスクリプトにより安䟡なホスティングの負荷が倧幅に削枛され、1日あたり5000以䞊のホストのトラフィックでサむトをねじるこずができたした。



さらに、サむトをテストするず、テストしたサむトのペヌゞ読み蟌み速床が非垞に速いこずがわかりたした。 たた、このオンラむンサヌビスのIPアドレスから送信された芁求の数が開発されたスクリプトで蚱可されおいる制限を超えた堎合、スクリプトはサむトのテストをブロックしたしたスクリプトに蚭定された1぀のIPアドレスからの芁求の最倧数は15秒で3芁求です。



぀たり、クロヌルや混andずした集䞭ク゚リからサむトを保護するこずは、圓初の想定どおりに機胜したす。 ぀たり、1぀のIPアドレスから発信されたリク゚ストの数ナヌザヌのIPアドレスが「垞に蚱可されるIPアドレス」のリストたたは「垞に犁止されるIPアドレス」のリストにない堎合は、特定の時間間隔で、ブラりザ、プログラムを䜿甚しおリク゚ストが送信されたかどうか、たたはリク゚ストの送信時にプロキシサヌバヌが䜿甚されたかどうかにかかわらず、ナヌザヌのIPアドレスは䞀時的にブロックされたすナヌザヌの実際のIPアドレスをマスクするため。



All Articles