Нужна помощь с некоторым SQL - PullRequest
0 голосов
/ 04 мая 2009
<?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>

Как я могу запретить людям просто вводить пробелы и вставлять пустые записи? : / И видите ли вы другие потенциальные угрозы?

Спасибо. / Newbie

Ответы [ 5 ]

2 голосов
/ 04 мая 2009
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
  }
}
0 голосов
/ 04 мая 2009

как сказал schooner, вы должны проверить поля до вызова 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 голосов
/ 04 мая 2009

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

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

В целях безопасности: вы должны проверять данные перед выполнением запроса вставки, валидаторы могут быть такими же, как js-валидаторы (но «умные» пользователи могут просто отключить JavaScript в браузере)

0 голосов
/ 04 мая 2009

Вы можете обрезать эти значения и проверить наличие пустых строк, а затем запросить у пользователя настоящий адрес электронной почты. Вы также можете использовать регулярные выражения как часть проверки. Наконец, я не уверен, как добиться этого с помощью PHP, но вы можете параметризовать SQL.

0 голосов
/ 04 мая 2009

Вы должны выполнять проверку полей до вызова любого SQL, чтобы предотвратить нежелательные записи, а также внедрение SQL.

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

Теперь в вашем коде кто-то может ввести что угодно и что угодно.

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

РЕДАКТИРОВАТЬ - похоже, что SQL инъекция уже покрыта mysql_real_escape_string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...