0

私が現在探しているのは、シンプルで基本的なログイン資格情報のサニテーションスクリプトです。

私はそうするための関数を作っていることを理解しています、そして私はそれを持っています...しかしそれが今しているのはストリップタグだけです...

私はreplaceを使用する運命にありますか?または、すべての特殊文字とスペースを削除して文字と数字のみに制限する方法はありますか?パスワードについては、文字と数字の感嘆符、ピリオド、およびその他の特殊文字のみに制限して、自分に影響を与えないようにする方法はありますか? SQLクエリ。

助けてください :/

ありがとう、マット

4

3 に答える 3

1

文字列をSQLに対して安全にしたい場合は、を使用しますmysql_real_escape_string()

文字列を特定の文字に制限する場合は、正規表現を使用します。

たとえば、az、0〜9、感嘆符のみが必要な場合は、使用できます。

   $string = preg_replace('^[^a-z0-9!]+$', '', $string);

これにより、正規表現に一致しないものがすべて削除されます。

文字列がそのパターンに一致するかどうかを確認する場合は、を使用しますpreg_match()。読みやすくするために、を取り出して、代わりに^bang /not/!演算子を使用して式を続行することをお勧めします。

echoページへのアクセスを安全にするために物事を取り除くことについて話している場合は、を使用してくださいhtmlspecialchars()。状況によっては、さらに消毒する必要がある場合があります。

覚えておいてください:パスワードの文字を制限している場合、エンドユーザーが覚えやすいというのは理論的な観点からのみ意味があります。文字を制限すると、パスワードブルートフォーサーが簡単になり(チェックする文字のプールが少なくなります)、ストレージに影響を与えることはありません(ソルトおよびハッシュする必要があるため)。

于 2010-05-27T06:07:07.843 に答える
0

ユーザー名とパスワードに使用できる文字を制限したいようです。このようなものです。

if (!preg_match('/^[a-zA-Z0-9_]++$/', $username)) {
  // reject username
}

if (!preg_match('/^[a-zA-Z0-9\.!@#$%^&*_-]++$/', $password)) {
  // reject password
}

誰かのクレデンシャルの文字を静かに置換/削除するのは悪い考えです。これらの文字は許可されていないというフィードバックを提供する必要があります。また、他の人がすでに触れているセキュリティ上の理由から、パスワードで許可する文字を制限しすぎるのも悪い考えです。

于 2010-05-27T06:08:34.950 に答える
0

まず、パスワードをサニタイズしないでください。SQL クエリに近づくずっと前にハッシュ化する必要があるため、実際には逆の効果があり、ユーザーにとってアプリケーションの安全性が低下します。


$password = "hey'; --droptable";
$hashedPass = sha1("salt" . $password);
// sha1 returns a alphanumerical hash of the password
// stick the hash in the database

MySQL データベースを扱っている場合はmysql_real_escape_string()、アレックスが言ったように十分です。この方法で覚えておかなければならないことの 1 つは、MySQL データベースへのオープン接続が機能するために必要になるということです。


mysql_connect();
$string = "hey'; --droptable";
$string = mysql_real_escape_string($string);
echo $string; // outputs "hey\' --droptable"

他にもエスケープ文字列メソッドを持つDBMS API がいくつかあります。

于 2010-05-27T06:58:17.993 に答える