Итак, я немного изучил PHP и попытался создать простое приложение, но я не уверен, что моя веб-страница защищена от xss и других подобных атак.
Мой код PHP
<?php
$title=$keywords=$description="";
$valid_er="";if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty($_POST['title'])){
$valid_er="has-error";
}
else{
$title="<title>".test($_POST["title"])."<title>";
}$keywords='<meta name="keywords" content="'.test($_POST["keywords"]).'" />';
$description='<meta name="description" content="'.test($_POST['description']).'" />';
}
function test($ci){
$ci=htmlentities($ci);
$ci=stripcslashes($ci);
return $ci;
}?>
И МОЯ HTML ФОРМА
<form method='post' class='form-group' action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<label> Your Title </label> <input placeholder="Your websites title" type="text" name="title" class='form-control' class='form-group-item'/></br>
<label> Keywords </label> <input placeholder="Your keywords separated by comma " type="text" name="keywords" class='form-control' class='form-group-item'/></br>
<label>Description </label> <textarea placeholder="A nice description about your website;" name="description" class='form-control'></textarea></br>
<input type="submit" class='btn btn-info'>
</form>
Я просто хотел знать, уязвим ли я для межсайтового скриптинга, потому что я не думаю, что использую только
htmlspecialchars ()
защитит меня.
Я просто хотел знать, уязвим ли я для межсайтовых скриптов
Нет, вы не просто используете htmlspecialchars
будет защищать вас от XSS в большинстве случаев (если вы используете двойные кавычки вокруг атрибутов и следуйте правилам в моем последнем абзаце).
Вам не нужно использовать stripcslashes
и вам не нужно кодировать свой <
, так далее.
Обратите внимание, однако, что htmlspecialchars
не кодирует ни одной кавычки ('
) по умолчанию. Я упоминаю об этом, потому что для вашего form
tag, вы в основном используете одинарные кавычки и просто двойные кавычки для действия, что является действительно хорошей идеей, так как в противном случае ваш код был бы уязвим для XSS. Чтобы избежать этой проблемы, вы можете использовать htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
, с которой одинарные кавычки также будут закодированы. Вы все еще не можете просто опустить использование любых кавычек (если вы сделаете это, предотвращение XSS станет намного более сложным, так как вам нужно будет экранировать все символы, с которыми вы можете выйти из этого контекста, включая пробел, +
и т. д.), но при этом вы можете использовать двойные или одинарные кавычки и быть в безопасности.
Для получения дополнительной информации, проверьте этот сайт о XSS профилактика (он говорит вам, где такого рода кодировки недостаточно; вы никогда не должны помещать пользовательский ввод внутрь <script>
, <style>
HTML-комментарии, имена атрибутов или имена тегов).
Других решений пока нет …