2009-05-04 15 views
0
<?php 

if (isset($_POST['email'])) { 

$email = mysql_real_escape_string($_POST['email']); 
$password = mysql_real_escape_string($_POST['password']); 

mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')"); 

} 

?> 


<h1>Create Account</h1> 

<form action="" method="post"> 
<table cellspacing="3"> 

<tr> 
<td valign="top">E-mail address:</td> 
<td><input type="text" name="email" size="28"></td> 
</tr> 

<tr> 
<td valign="top">Password:</td> 
<td><input type="text" name="password" size="28"></td> 
</tr> 

<tr> 
<td colspan="2" align="center"> 
    <input type="submit" value="Submit"> 
</td> 
</tr> 

</table> 
</form> 

人がスペースを入力して空のエントリを挿入するのを防ぐ方法を教えてください。 :/ 他にも潜在的な脅威はありますか?一部のSQLに関する助けが必要

ありがとうございました。 /初心者

答えて

0

不要なエントリやSQLインジェクションを防ぐために、SQLを呼び出す前にフィールドの検証を行う必要があります。今、誰かが何か、すべてを入力することができ、あなたのコードでなど

ます。また、パスワードの長さ/強さにいくつかのチェックを課すしたい場合があります、電子メールでの正規表現、

また、ユニークな電子メール/ユーザー名制約を使用して、DB側の重複エントリも処理していますか?

EDITは - あなたはSQLインジェクションは、あなたがそれらの値をトリミングして、空の文字列をチェックして、実際の電子メールアドレスをユーザーに求めることができる

0

をmysql_real_escape_stringので既にカバーされている可能性のように見えます。いくつかの検証の一環としてregexを使用することもできます。最後に、PHPを使用してこれを達成する方法がわかりませんが、SQLをパラメータ化できます。

2
if(!empty($_POST['email']) && !empty($_POST['password'])){ 
    $email = trim($_POST['email']); // Remove trailing and leading spaces 
    $password = trim($_POST['password']); 
    if($email != "" && $password != ""){ 
    $email = mysql_real_escape_string($email); 
    $password = mysql_real_escape_string($password); 
    mysql_query("INSERT INTO accounts (email, password) VALUES ('$email', '$password')"); 
    } else { 
    //DISPLAY ERROR MSG 
    } 
} 
+1

また、平文のpasswoprdをデータベースに格納しないでください。md5()またはsha1()を使用する必要があります。 –

+0

電子メールアドレスを正規表現で検証します。パスワードをハッシュします。 –

0

ユーザビリティとセキュリティについて考える必要があります。

ユーザビリティのため:ユーザが間違った形式でメールを書くなど、いくつかのツールチップを表示するjavascript-validatorsを追加します。セキュリティのため

:あなたは、インサート・クエリを実行する前にデータを検証する必要があり、バリデータはJS-バリデータと同じにすることができます(ただし、「スマート」ユーザーが単にブラウザでJavaScriptを無効にすることができます)

-1

スクーナー船は、あなたが検証する必要があり、言ったようにSQLクエリを呼び出す前のフィールド。フィールドの検証に使用される共通の関数を持つファイルを保持するのがよい習慣だと思いますので、コード内でこの関数を何度も再利用することができます。この検証は、通常のエクスプレッションを使用して行うことができます。私はあなたに例を残しました。あなたは、入力項目の多くを検証する必要がある場合

function checkEmail($email) 
{ 
    if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-]) 
       *@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", 
       $email)){ 

    return true; 
    } 
    return false; 
} 

また...、多分あなたは、PHPでオープン源泉検証ライブラリの検索に興味があるでしょう。

+0

電子メールアドレスの正規表現は非常に間違っています。 http://stackoverflow.com/questions/201323/を参照してください。 – bortzmeyer

関連する問題