10

フォームにGETを使用するつもりですが、ユーザーが変更できないようにクエリ文字列の値を暗号化したいと思います。(セキュリティのためではなく、データを隠す目的で)

暗号化について説明しているWebサイトをいくつか見つけましたが、ユーザーが送信ボタンを押した後、暗号化を実装する方法がわかりません。例: http: //myscriptlibrary.wordpress.com/2010/04/14/how-to-encrypt-query-string-in-php/

これを示すことができる例はありますか?

ありがとう。

4

4 に答える 4

23

あなたが提供したリンクの私の理解から。GET 変数を暗号化するか、少なくとも難読化する必要があります。

これを行うための最良かつ最も簡単な方法は、base64_decode/encode たとえば次のような文字列をエンコードするために使用することです。

$link = "http://www.example.com/?item=".urlencode(base64_encode("user-data"));

$linkのようhttp://www.example.com/?item=rklgEwkelnf%3D%3Dになりますが、一見文字化けした (base64ed) テキストを使用可能なものに変換するには、次のようにします。

foreach($_GET as $loc=>$item)
    $_GET[$loc] = base64_decode(urldecode($item));

$_GETその後、通常どおり変数を自由に使用できます。

于 2012-08-24T04:02:53.027 に答える
11

次のソリューションは、実装が簡単で、クレジット カード情報や NASA アルゴリズムなどの非常に機密性の高いデータを扱わない限り、十分に強力です

。GET - ハッシュ値を追加します。例:

$parameter = "abc"; //The parameter which you'll pass as a GET parameter
$salt = "cV0puOlx";
$hashed = md5($salt.$parameter);//A hash that you'll pass as well
header("Location: http://www.yourdomain.com?param=$parameter&hash=$hash");

次に、パラメーターを読み取るときに、ハッシュが有効なものであることを確認します。

$parameter  = $_GET['param'];
$hash = $_GET['hash'];
$salt = "cV0puOlx";
$hashed = md5($salt.$parameter);
//now you check:
if ($hash === $hashed){
   //everything's fine - continue processing
}
else{
  // ERROR - the user tried to tamper with your parameter
  // show error-message and bail-out
}
于 2012-08-24T03:47:28.133 に答える
7

ここで受け入れられた回答は、実際の保護を提供しません。エンコードされたパラメーターを取得してオンラインの base64_decode に入れるだけで、値を直接渡したかのように表示されます!

もう 1 つの回答では、パススルー値として $hash を使用していますが、その値は $hashed だけでは定義されていません。

于 2014-07-15T10:24:07.910 に答える