3

register_global が無効になっているときに完璧に機能する単純なキャプチャがあります。これは PHP Manual Using Register Globalsによると正しいものです

しかし、時々私は多くのホスティングに移動し、デフォルトでグローバル登録を有効にしているため、キャプチャが機能しなくなり、正しく入力された場合でも常に間違ったキャプチャが表示されます。

私の質問

register_global が有効な場合と無効な場合に機能しないのはなぜですか?

コード

キャプチャ.php

<?PHP
session_start();
$digits_num=5;
$x_pos=25;
$y_pos=6;
$font_size=5;
function random_num($n){
$start_num = "1".str_repeat("0", $n-1);;
$end_num   = str_repeat("9", $n);
return rand($start_num, $end_num);
}
$text = random_num($digits_num);
$_SESSION["captcha_num"] = md5($text);
$captcha = imagecreatefrompng("./images/captcha.png");
$font_color['black']=imagecolorallocate($captcha, 0, 0, 0);
$font_color['white']=imagecolorallocate($captcha, 80, 73, 20);
imagestring($captcha, $font_size, $x_pos, $y_pos, $text, $font_color['white']);
header("Content-type: image/png");
imagepng($captcha);
?>

フォーム

<form name="frm" method="post" action="add.php">
<img src="captcha.php">
<input type="text" name="captcha_num" id="captcha_num" >
<input type="submit" name="submit" id="submit" value="submit">
</form>

add.php

<?PHP
session_start();
if(md5($_POST['captcha_num']) != $_SESSION['captcha_num']){
echo "Wrong captcha";
}else{
echo "Good Pass it";
}
?>
4

1 に答える 1

4

参照したマニュアルページから:

この機能は、PHP 5.3.0 で非推奨となり、PHP 5.4.0 で削除されました
(...)
おそらく、PHP で最も物議を醸す変更は、PHP ディレクティブ register_globals のデフォルト値が PHP で ON から OFF に変更されたときです » 4.2 .0.

つまり、スイッチをオフにします。

どうすればオフにできますか?

オプション 1: ありini_set

このコードをコードの上に配置します (または、ブートストラップ ファイルがある場合はその中に配置します)。

ini_set('register_globals', 'Off')

オプション 2: htaccess を使用する

Web.htaccessサイトのルートにファイルを作成し、次のコードを追加します。

php_flag register_globals Off

悪いテクニックを使用した場合にスクリプトが間違っている理由を自問するのではなく、その悪いテクニックをオフにする/使用を避ける方法を自問してください。

于 2012-05-05T21:15:07.893 に答える