Base64 を使用しているため、GET メソッドを通じてこのトークンを送信するときに問題が発生します。
例: http://test/test.php?a=1 2
$_GET["a"] を使用すると、次の結果が得られます: 1 2、つまり、プラス記号がなくなりました。最初は urlencode を使用して変換しましたが、予期しない結果が常に 1 つまたは 2 つありました。
後から考えたら、base64 の文字は [A-Za-z0-9 /=] までしかなく、数が多すぎてプラス記号に問題があるので、プラス記号は問題を引き起こさない記号であり、下線は最良の選択です。以下は変更されたコードです:
GEncrypt.inc.php
コードをコピーします コードは次のとおりです:
class GEncrypt {
protected static function keyED($txt, $encrypt_key) {
$encrypt_key = md5 ($encrypt_key)
$ctr = 0; 🎜> $tmp = "";
for($i = 0; $i if ($ctr == strlen ( $encrypt_key ))
$ctr = 0 ;
$tmp .= substr ( $txt, $i, 1 ) ^ substr ( $encrypt_key, $ctr, 1 );
$ctr ; ;
}
public static function encrypt($txt, $key) {
$encrypt_key = md5 ((( float ) date ( "YmdHis" ) rand ( 10000000000000000, 9999999999999999 9 )) 。 rand ( 100000, 999999 ) );
$ctr = 0;
$tmp = "";
for($i if ($ ctr == strlen ( $encrypt_key ))
$ctr = 0;
$tmp .= substr ( $encrypt_key, $ctr, 1) . (substr ( $txt, $i, 1) ) ^ substr ( $ encrypt_key, $ctr, 1 ));
$ctr ;
}
return ( preg_replace("/\ /s","_", base64_encode ( self::keyED ( $ tmp, $key ) ) ));
}
//base64 [A-Za-z0-9 /=]
public static function decrypt($txt, $key) {
if( $txt == " "){ return false;}
//echo preg_replace("/_/s"," ",$txt)
$txt = self::keyED (base64_decode ( preg_replace(" /_/s" ," ", $txt) ), $key );
$tmp = "";
for($i = 0; $i
$i ;
$tmp .= (substr ( $txt, $i, 1 ) ^ $md5);
return $tmp; }
}
?>
GToken.inc.php
コードをコピー
コードは次のとおりです:
/**
* 原則: トークンの割り当てをリクエストするときは、一意のトークン、base64(time rand action) を割り当てる方法を見つけてください。
* 送信された場合は、このトークンが以前に使用されたことを示すためにこのトークンを記録します。重複した送信を避けてください。
*
*/
class GToken {
/**
* 現在のトークンをすべて取得します
*
* @return array
*/
public static function getTokens() {
$tokens = $_SESSION[GConfig::SSN_KEY_TOKEN ];
if (empty($tokens) &&!is_array($tokens)) {
$tokens = array();
}
$tokens を返します。
}
/**
* 新しいトークンを生成します
*
* @param string $formName
* @param 暗号化キー $key
* @return string
*/
public static function newToken($formName,$key = GConfig::ENCRYPT_KEY ){
$token = GEncrypt:: encrypt($formName.session_id(),$key);
$token を返す;
}
/**
* トークンを削除すると、実際にはセッション内の配列に要素が追加され、データの繰り返しの送信を避けるためにそのトークンが以前に使用されたことを示します。
*
* @param string $token
*/
public static function dropToken($token){
$tokens = self::getTokens();
$tokens[] = $token;
GSession::set(GConfig::SESSION_KEY_TOKEN ,$tokens);
}
/**
* 指定された Token であるかどうかを確認します
*
* @param string $token 確認するトークンの値
* @param string $formName
* @param boolean $fromCheck するかどうかソースを確認し、 true の場合、トークンに付加されている session_id が現在の session_id と同じかどうかを判定します。
* @param string $key 暗号化キー
* @return boolean
*/
public static function isToken($token,$formName,$fromCheck = false,$key = GConfig::ENCRYPT_KEY){
if(empty($token)) falseを返します。
$tokens = self::getTokens();
if (in_array($token,$tokens)) //結果が存在する場合、说明は过的トークンを使用します
return false;
$source = GEncrypt::decrypt($token,$key);
if($fromCheck)
return $source == $formName.session_id();
else{
return strpos($source,$formName) === 0;
}
}
public static function getTokenKey($token,$key = GConfig::ENCRYPT_KEY){
if($token == null || trim($token) == "") false を返します。
$source = GEncrypt::decrypt($token,$key);
return $source != "" ? str_replace(session_id(),"",$source) : false;
}
public function newTokenForSmarty($params){
$form = null;
抽出($params);
return self::newToken($form);
}
}
?>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









