2017-01-17 8 views
0

Может кто-то помочь мне добавлять htmlspecialchars, чтобы предотвратить XSS в этом коде:htmlspecialchars в PHP

<?PHP 
    if(isset($_POST['update'])) { 
     $ts=$_POST['ts']; 
     $user=$_POST['user']; 

     mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "' WHERE username='" .mysql_real_escape_string($user) . "'"); 
     echo '<div class="rounded-container">'; 
     echo '<div class="rounded-green rounded-done">'; 
     echo '<b>reload</b><br>'; 
     echo '</div>'; 
     echo '</div>'; 
    } 
?> 

Я не знаю, куда девать их, он должен быть в функции POST права?

+0

XSS предотвращение действия обычно бывает на выходе информации не вход. Но если вы хотите удостовериться, что эти два значения post не имеют html-символов при вводе в базу данных, вы можете передать их через htmlspecialchars. – MarkSkayff

+0

Да, я хочу сделать это Марк, но знаете ли вы, КАК Я могу добавить их в свой сценарий? Я не знаю, где их разместить. – IbraDigga

+0

$ ts = htmlspecialchars ($ _ POST ['ts']); и то же самое для пользователя var. – MarkSkayff

ответ

0

Заменить $ ц и строку $ с пользователем:

$ts=htmlspecialchars($_POST['ts']); 
$user=htmlspecialchars($_POST['user']); 

Затем оставьте запрос в покое, он будет использовать mysql_real_escape_string() на htmlspecialchars раздел значение.

+0

Спасибо, Патрик, я заменил обе линии. Должен ли я делать/добавлять больше в этот скрипт или достаточно? – IbraDigga

+0

Это БЕСПЛАТНЫЙ совет. Вы будете html-экранированием значений, которые вы помещаете в базу данных. Затем, когда вы возвращаете его из базы данных, вы не знаете, должна ли ваша функция вывода на экран (эхо) выходить из нее или нет. Всегда сохраняйте «сырое» значение в памяти и конвертируйте, когда вы выводите/вставляете в базу данных и т. Д., И тогда вы не будете путаться. – Robbie

+0

Значит, вы не согласны с Патриком? – IbraDigga

0

Вы должны сделать его безопасным, используя различные функции в зависимости от того, что вы хотите сделать:

При выводе в формате HTML, сделать его «HTML безопасный», обернув в htmlspecialchars.

echo 'Writing to browser ' . htmlspecialchars($_POST['t']); 

При выводе на SQL, сделать его "SQL-безопасным", убегая его для SQL (смотрите примечание ниже).

$sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']); 

Когда вы выводите URL-адрес, сделайте его «безопасным по URL-адресу», удалив его для URL-адресов.

$link = 'http:/example.com?value=' . urlencode($_POST['t']) 

Аналогичные правила применяются для кодирования JSON, вывода на XML и т.д.


Примечание по MySql: Вы правильны, чтобы избежать его, но вы используете функции, которые больше не существуют в PHP (вам поэтому используют старую версию PHP). Проверьте mysqli или pdo в руководстве и используйте эти функции.

+0

спасибо Робби, я знаю, что это старый, но мой текущий хост использует старую версию, я скоро обновлю! Я изменил обе переменные, как вы думаете, этого будет достаточно? – IbraDigga

+1

mysqli и PDO были в течение 10 лет +; даже «старые» версии PHP на любом хосте должны иметь их. Они не смогут через год или два иметь mysql(). Итак, конвертируйте сейчас, чтобы спасти вас от изучения недействительного класса. – Robbie

+0

Также см. Мой комментарий к ответу Патрика: если вы html-escape, а затем вставьте в базу данных, вы можете потерять информацию о том, какие значения были экранированы, а какие нет. Поэтому сохраняйте «сырые» значения в руке и выходите/конвертируйте при выводе/вставке в базу данных; то вы следуете простому правилу ALWAYS escaping для вывода и не должны делать это выборочно.Это также облегчит переход, если вы немного запустите механизм шаблонов. – Robbie