2015-03-18 4 views
2

У меня есть страница staff.php, в которой указаны имя, должность и детали персонала. Когда пользователю нужно будет отредактировать информацию о персонале, они будут отправлены на страницу edit.php. edit.php страница показать имя и название на text field и подробно на textareaМне даже нужно `htmlspecialchars()` для значения textarea

мой вопрос, мне нужно даже htmlspecialchars в edit.php page.I я ничего страницы пользователей не печатает, только на этом fields.But я использую htmlspecialchars на staff.php перед печатью для пользователя.

До сих пор открыт для XSS Attack?

Код

часть из staff.php

$staff.="<div id='sob'>".htmlspecialchars($title)."<br>".htmlspecialchars($sub_title)."<div><a href='edit.php?pid=".htmlspecialchars($pro_id)."'><input type='submit' id='editx' name='editx' value='Edit'></a></div><div id=''><br>".htmlspecialchars($detail)."</div><hr id='h'></div>"; 

часть из edit.php

if(isset($_GET["pid"])){ 
    $name4=$title;   // 
    $sub_title4=$sub_title; //using prepared statement 
    $detail4=$detail;   // 
    } 

    HTML part at edit.php 

<input type='text' id='staff_name' name='staff_name' value="<?php echo $name4;?>" required> 
</br><input type='text' id='staff_pos' name='staff_pos' value="<?php echo $sub_title4;?>" required> 
</br><textarea id='staff_detail' name='staff_detail' cols='30' rows='6' required><?php echo $detail4;?></textarea></br> 
+2

Да потому, что если значение '$ detail4' было' 'было бы уязвимым. –

+1

Для тегов '' с переменными в 'value =' вам также нужно использовать его с опцией 'ENT_QUOTES', чтобы предотвратить закрытие цитаты внутри переменной от атрибута' value = 'и взлома вашего HTML. 'value =" "' –

+0

Хорошо, это имеет смысл. Как я узнал из большинства блога, я, хотя XSS, мог произойти только при печати на экран. – Coder

ответ

5

Защита от XSS не только необходимо, когда переменные должно быть на экране; это необходимо, когда пользовательские значения используются для создания разметки HTML, независимо от контекста.

Это необходимо позвонить htmlspecialchars() по переменной PHP, размещенной внутри <textarea>. Рассмотрят следующий пример:

<?php 
    // Unsafe text in the variable 
    $detail4 = '</textarea><script>alert("XSS!");</script>'; 
?> 

<textarea><?php echo $detail4; ?></textarea> 

Это приводит к закрытому </textarea> с последующим небезопасным впрыскиваемым сценарием (и другое закрытием </textarea> браузер будет, вероятно, игнорировать).

Также необходимо вызвать htmlspecialchars() на переменные, помещенные в атрибуты value="", выбирая соответствующую константу, чтобы обеспечить правильное кодирование внутренних кавычек в переменных, чтобы предотвратить преждевременное завершение атрибута цитатой. Если вы последовательно используете двойные кавычки для атрибутов, вы можете принять значение по умолчанию ENT_COMPAT, но если вы иногда указываете атрибуты с одинарными кавычками, используйте ENT_QUOTE.

<input type='text' name='staff_pos' value="<?php echo htmlspecialchars($sub_title4, ENT_QUOTES);?>" ...>