Апостроф из поля базы данных в javascript - PullRequest
0 голосов
/ 11 сентября 2018

Я допустил ошибку новичка при обработке данных формы с помощью моего приложения на PHP и Javascript, где я не ожидал и не поддерживал апострофы (') в текстовом поле.

Еще больше беспокоит то, что в приложении из нескольких десятков тысяч строк я использовал одинарные кавычки или '', чтобы заключать переменные, включающие HTML и переменные, которые могут включать апостроф из этой же таблицы, вместо использования кавычек ("") и экранирования HTML.

Перед тем, как изменить данные $ _POST, которые вводятся в данные MySQL, с помощью функции PHP real_escape_string, функция , которая по-прежнему сохраняет текст с апострофом, без косых черт. Затем, изменив каждый экземпляр, в котором переменная определена с апострофом, и изменив ее на кавычки ("") и затем выбрав экранирование, я хотел спросить здесь, не упустил ли я что-то.

Вот пример того, что я могу сделать с данными $ _POST, используя функцию PHP / Mysql выше

$ db-> real_escape_string ($ _ POST [ "имя"]) где "имя" = О'Брайен В базе данных хранится как О'Брайен, а не О'Брайен

Когда я читаю эти данные во внешний интерфейс, это делается так:

var options = '<option value="<?php echo $row[$name];?>" selected><?php echo $row[$name];?></option>';

В этих случаях, когда имя включает апостроф, консоль javascript выдает ошибку «Uncaught SyntaxError: missing) после списка аргументов», что имеет смысл.

Я надеюсь на предложения о том, как решить эту проблему с наименьшими усилиями / временем, но сделано ПРАВИЛЬНО, что не вызывает никаких проблем при использовании апострофов или даже цитат в будущем.

1 Ответ

0 голосов
/ 11 сентября 2018

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

Однако эти методы не связаны с вашей текущей проблемой. В настоящее время вы испытываете влияние неправильной инкапсуляции при выводе, а также можете использовать XSS-инъекцию. Вы должны использовать http://php.net/manual/en/function.htmlspecialchars.php для вывода в браузер.

 var options = '<option value="<?php echo htmlspecialchars($row[$name], ENT_QUOTES);?>" selected><?php echo htmlspecialchars($row[$name] , ENT_QUOTES);?></option>';

Но вы также должны прочитать, https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F,, потому что вы находитесь в JS, а не в HTML, поэтому этого, вероятно, будет недостаточно.

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