Как я могу позволить пользователю ввести зарезервированные символы в базу данных с комбинацией PHP, MySQL и Ajax?

Я настроил веб-сайт, который позволяет пользователю добавлять места к базе данных. Однако я незнаком с regex и таким образом, я не уверен, как позволить символы как апострофы и знаки доллара без них влияющий на базу данных INSERT.

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

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

С наилучшими пожеланиями, Dan

1
задан Dan Hanly 12 August 2010 в 09:54
поделиться

4 ответа

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

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

  • Контролируйте ввод данных пользователем в максимально возможной степени (предопределенные переменные, автоматические подсказки и т. Д.)
  • Отфильтруйте любой нежелательный ввод, например теги html / script, с помощью strip_tags .
  • Используйте подготовленные операторы или попробуйте ознакомиться с PDO , например
  • По крайней мере, используйте mysql_real_escape_string перед вставкой в ​​вашу базу данных
2
ответ дан 2 September 2019 в 22:13
поделиться

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

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

0
ответ дан 2 September 2019 в 22:13
поделиться

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

Хорошим примером является MDB2

0
ответ дан 2 September 2019 в 22:13
поделиться

Проще говоря, вы хотите использовать подготовленные операторы для части 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; - без проблем

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

0
ответ дан 2 September 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: