PHP はセッションを使用してページの繰り返し更新を防止します_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:41:27
オリジナル
804 人が閲覧しました

b.phpコード

//投稿を通じてのみアクセスできます
if ($_SERVER['REQUEST_METHOD'] == 'GET')
{header('HTTP/1.1 404 Not Found'); '親愛なる、ページは存在しません' ); }
$fs1=$_POST['a'];
$fs2=$_POST['b'];
$allowTime = 30; //読み取り IP 制限に対して更新する訪問者の IP を取得します
/*開始する実際の IP を取得します*/
if ( ! function_exists('GetIP'))
{
function GetIP()
{
static $ip = NULL;
if ($ ip !== NULL)
{
return $ip;
}
if (isset($_SERVER))
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$arr = explode(', ', $_SERVER['HTTP_X_FORWARDED_FOR']);
/* X-Forwarded-For の x 番目の不明でない有効な IP 文字を取得します */
foreach ($arr as $xip)
{ www.jbxue .com
$xip = トリム($xip);
if ($xip != '不明')
{
$ip = $xip;
}
}
}
elseif (isset($_SERVER[' HTTP_CLIENT_IP'] ))
{
$ip = $_SERVER['HTTP_CLIENT_IP']
}
else
{
if (isset($_SERVER['REMOTE_ADDR']))
{
$ip = $_SERVER['REMOTE_ADDR] '];
}
$ip = '0.0.0.0'
}
}
}
if (getenv('HTTP_X_FORWARDED_FOR'))
{
$ip = getenv('HTTP_X) _FORWAR DED_FOR ');
}
elseif (getenv('HTTP_CLIENT_IP'))
{
$ip = getenv('HTTP_CLIENT_IP')
}
else
{
$ip = getenv('REMOTE_ADDR');
preg_match("/ [d.]{7,15}/", $ip, $onlineip);
$ip = ! $onlineip[0] : '0.0.0.0'; return $ip;
}
}
/*実際の IP の取得の終了*/
$reip = GetIP();
//関連パラメータ md5 暗号化
$allowT = md5($reip.$fs1.$fs2); if(!isset( $_SESSION[$allowT])){
$_SESSION[$allowT] = time();
}
else if(time() - $_SESSION[$allowT]-->>$_SESSION[$allowT] = time();
} www.jbxue.com
//更新が速すぎる場合は、404 ヘッダーとプロンプトが直接表示されます
else {header('HTTP/1.1 404 Not Found '); die('from' .$ip.'親愛なる、更新が早す​​ぎました');}
?>
コードは非常に単純で、POST を通じて更新する必要があるページに送信された IP とデータを暗号化し、それを md5 暗号化後にセッションに書き込み、保存されたセッションを通じて更新時間間隔を判断するだけです。更新を許可するかどうかを決定します。 2 つのパラメータ「$fs1=$_POST['a'];」と「$fs1=$_POST['a'];」は、他のページが必要とするページに送信するパラメータを参照していることに注意してください。 post メソッドを通じて更新されます。 IP に加えてこれらのパラメータが追加される理由は、さまざまな投稿結果を区別するためです。 (実際には、いわゆるアンチリフレッシュは、特定のページが繰り返し送信されるのを防ぐことです。)

より具体的には、たとえば、上記のコードが b.php ページの先頭に配置されている場合、a.html ページには次のフォームが表示されます:
コード:



b.html

input type="hidden" name="a" value="a"/>

<ボタン名="" type= 「送信」>送信

このページによって送信された 2 つのパラメーター a と b が、b.php の 2 つのパラメーターとまったく同じであることがわかります (実際には、送信されたページのパラメーターによって決定されるため、その逆である必要があります)。以前の PHP コードでは、データが送信されるページは post 経由でのみアクセスできると判断されているため、アドレスを直接入力すると 404 ヘッダー エラーが発生します。ページは post 経由でのみ取得できます。投稿が更新されると、パラメータ アドレスに独自のアドレスが表示されます。これにより、同じページ上の各 IP の更新を防ぐ効果が得られます。

さらに、クロスサイト送信を防ぐために、投稿されているページにリファラーを追加してソース Web サイトを決定することもできますが、リファラーは偽造される可能性があり、Firefox と IE8 では不可解にリファラーが失われることがよくあるため、これは追加しません。とりあえずコード。



http://www.bkjia.com/PHPjc/684115.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/684115.html

技術記事

b.php コード // post 経由でのみアクセスできます if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); '親愛なる、ページは存在しません。 ' );} session_start(); $fs1=$_POST[...

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