0

SOとすべてをグーグルで検索しましたが、答えがわかりません。

以下の PHP コードでプラス記号が使用できるのはなぜですか。

$aValid = array('-', '_', '.');

if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){

(ユーザーが 1234+ と入力すると、有効なように続行します????)。

私は通常、バイパスを見つけましたが、本当に必要ですか。

$aValid = array('-', '_', '.'); 
if (ctype_alnum(str_replace($aValid, '', (htmlentities ( trim ( $_POST['Rusername'] ) , ENT_NOQUOTES ))))){
    echo "+ ok";
}else{
    echo "+ not ok";
}

この種の検証を使用して、必要に応じて特別な文字を $aValid に追加したいと思います。

MySQL に挿入する前に、mysql_real_escape_string または準備済みステートメントを実行します。

+ 記号がコードの最初の部分で問題ない理由。私の意見では、それは本当にすべきではありません。

最新の更新 - PHP の if 句 (ホワイトリストで許可されている) に到達する前に + 記号がスペースになるように、A 側が Content-Type を変更したことを理解するために、低レベルのデバッグ HTTP ヘッダーを数時間必要としました...

なんて-それがあなたに起こらないことを願っています-経験:)

自分自身へのリマインダー: jQuery がこの検証プロセスの主要なプレーヤーである場合は、言及する必要があります...

4

2 に答える 2

2

すべきことは、すべてを 1 行にまとめるのではなく、プロセスの各段階を調べることです。

$name = $_POST['Rusername'];
var_dump($name);
$name = str_replace($aValid, '', $name);
var_dump($name);

etc... 基本的なデバッグ。ステートメントに複数の段階がある場合は、個々の段階を確認してください。ctype は完全に正常に動作している可能性がありますが、str_replace は何らかの形で失敗しています。

于 2011-10-17T16:00:12.700 に答える
0

+ 記号がコードの最初の部分で問題ない理由。私の意見では、それは本当にすべきではありません。

それは大丈夫ではありません...コードの最初の部分はfalseを返します..

記号を削除したい場合は、変数+に追加する必要があります$aValid

于 2011-10-17T16:06:51.787 に答える