Как я могу позволить пользователю вводить зарезервированные символы в базу данных с помощью комбинации PHP, MySQL и AJAX? - PullRequest
1 голос
/ 12 августа 2010

Я создал веб-сайт, который позволяет пользователю добавлять места в базу данных.Тем не менее, я не знаком с регулярными выражениями, и поэтому я не уверен, как разрешить символы, такие как апострофы и знаки доллара без их влияния на базу данных INSERT.

У меня есть форма, которая читается AJAX и обрабатывается с помощью PHP/ MySQL, так что есть языки, которые имеют свои собственные "зарезервированные" символы для различного использования.Реально регулярное выражение должно находиться в моем Javascript, прежде чем AJAX отправит строку.Я совершенно новичок в Javascript, поэтому я не уверен, как бы я поступил по этому поводу.

Есть ли шанс, что кто-то может помочь с этим, но также объяснить, как работает это регулярное выражение?

Приветствия, Дэн

Ответы [ 4 ]

2 голосов
/ 12 августа 2010

В основном, когда вы имеете дело с данными, предоставленными пользователем, вы не можете быть в курсе.По моему мнению, вставка проверки регулярных выражений в область JavaScript - плохая идея или ее недостаточно.Вы должны быть уверены, что вы фильтруете данные такого рода повсюду (и в достаточной степени).

Применяются общие правила фильтрации:

  • Контролируйте пользовательский ввод, насколько это возможно (предопределенные переменные,автоматически предлагать и т.PDO например
  • Как минимум используйте mysql_real_escape_string перед вставкой в ​​базу данных
0 голосов
/ 12 августа 2010

Проще говоря, вы хотите использовать подготовленные операторы для части PHP / SQL.С PDO:

try {
    $dbh = new PDO($dsn,$user,$password);
    $stmt = $dbh->prepare('INSERT INTO users SET username = :user');
    $stmt->bindParam(':user',$_POST['user']);
    $stmt->execute();
    if ($stmt->rowCount == 1) {
        //success
    } else {
        //fail
    }
} catch (PDOException $e) { //Unhandled may expose $user/$password
    echo 'Database connection failed: ' . $e->getMessage();
}

и $_POST['user'] могут быть test'; DROP TABLE users; -- без проблем

К сожалению, я не совсем помню, как это сделать с JS, но я не советуюданные с вызовами AJAX (JS отключен, NoScript, больше ясности в браузере и т. д.)

0 голосов
/ 12 августа 2010

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

Хороший пример: MDB2

0 голосов
/ 12 августа 2010

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

Насколько я знаю, содержимое строки не повлияет на Javascript или PHP, так как это строка. Перед вставкой в ​​базу данных его необходимо экранировать, взгляните на функцию mysql_real_escape_string .

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