2009-05-04 4 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

Спасибо. /Newbie

ответ

0

Вы должны делать проверки в полях перед вызовом любого SQL, чтобы предотвратить нежелательные записи, а также SQL-инъекцию.

Вы также можете ввести некоторые проверки на длину пароля/силы, регулярное выражение на адрес электронной почты и т.д.

В коде теперь кто-то может войти что угодно и все.

Также вы обрабатываете дублирующие записи, а также на стороне БД с уникальным ограничением электронной почты/имени пользователя?

EDIT - Похоже, вы можете иметь SQL Injection покрыты уже с mysql_real_escape_string

0

Вы можете обрезать эти значения и проверить на пустые строки, а затем запрашивает у пользователя реальный адрес электронной почты. Вы также можете использовать регулярное выражение как часть некоторой проверки. Наконец, я не уверен, как достичь этого с помощью 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

Кроме того, никогда не храните открытые текстовые passwoprds в базе данных, вы должны md5() или sha1() их. –

+0

Подтвердите адрес электронной почты с регулярным выражением. Хешируйте пароль. –

0

Вы должны подумать об удобстве использования и безопасности.

Для удобства использования: добавьте javascript-валидаторы, которые будут показывать подсказки для пользователей, когда пользователи пишут электронное письмо в неправильном формате и так далее.

Для безопасности: вы должны проверить данные перед выполнением вставки-запроса, валидаторы могут быть такими же, как 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

Смежные вопросы