2016-11-28 2 views
4

Я пробовал все, и я до сих пор не могу понять это. addslahes(), str_replace(), htmlentities(), я просто не могу понять, почему двойные кавычки не отображаются на моем веб-сайте.Двойные кавычки в БД, нарушающие HTML-вывод

$sql = $con->prepare("SELECT * FROM `user_settings` WHERE `user_session` = '$user_session'"); 
$sql -> execute(); 

$result = $sql->fetchAll(PDO::FETCH_ASSOC); 

foreach ($result as $row) { 
    $advertising_1 = $row['advertising_1']; 
    $advertising_2 = $row['advertising_2']; 
    $website_name = $row['website_name']; 
    $website_url = $row['website_url']; 
    $statistics = $row['statistics']; 
} 
echo '<input type="text" name="website_name" placeholder="Your Website URL" value="'. $website_name. '" />' ?> 

Может кто-нибудь объяснить, где я здесь ошибся? Возникает проблема с двойными кавычками в моей строке. Одиночные кавычки были исправлены с помощью mysql_escape, но, похоже, они устарели.

+0

вы можете дать один пример для вашего значения, которое вы хотите вставить –

+0

@ arif_suhail_123 Рассмотрим '$ website_name' =' «example.com» '(заметьте, двойные кавычки в названии веб-сайта – nTuply

+0

, если вы используете проблему привязки, будет решена, '$ stmt = $ dbh-> prepare (" INSERT INTO REGISTRY (имя, значение) VALUES (?,?) "); $ stmt-> bindParam (1, $ name); $ stmt-> bindParam (2, $ value); Этот код я получил с веб-сайта php вручную, из ссылки chris, и это подсказка для вашего кода и должна работать ' ', Если ваш запрос в порядке –

ответ

3

Вам необходимо избежать данных, которые вы выводите в браузер, использовать htmlspecialchars и использовать константу кавычек (ENT_QUOTES), чтобы все кавычки были преобразованы в объекты. Обратите внимание, что также предотвращаются/выполняются инъекции XSS. Элементы/атрибуты закрыты, когда они не должны быть, а затем написан вредоносный код.

echo htmlspecialchars('Encode all of these "test" test \'test \'', ENT_QUOTES); 

Выход:

Encode all of these &quot;test&quot; test &#039;test &#039; 

и в браузере:

закодировать все эти " тест " тест ' тест '

Кроме того, из кода вы diş Вы играли неправильно, придумывая подготовленные заявления. Значения должны быть связаны, а не конкатенироваться с вашим запросом. Таким образом, драйвер PDO будет обрабатывать цитирование/экранирование. Это может привести к подобным проблемам для вас в будущем, если вы продолжите использовать его, как есть. Также открывает вам SQL-инъекции.

Для получения дополнительной информации о подготовленных заявлений см: http://php.net/manual/en/pdo.prepared-statements.php

+0

Отлично. Работала отлично. Теперь я буду читать о том, как писать правильные подготовленные заявления PDO и не допускать подобных ошибок в будущем. Быстрый вопрос, хотя, любые хорошие информационные ресурсы, чтобы узнать больше о проблемах безопасности и как их предотвратить? – nTuply

+0

Это широкая тема, но на этом сайте есть хорошая документация, она не специфична для PHP, https://www.owasp.org/index.php/Main_Page. – chris85

+0

Отлично! Благодарю. – nTuply

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