好的,所以我学会了一些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()
会保护我。
答案 0 :(得分:1)
我只是想知道我是否容易受到跨网站脚本的攻击
不,你不是,在大多数情况下,只使用htmlspecialchars
会保护你免受XSS攻击(如果你在属性周围使用双引号并遵循我上一段中的规则)。
您无需使用stripcslashes
,也无需对自己的<
等进行编码。
请注意,htmlspecialchars
默认情况下不会对单引号('
)进行编码。我之所以提到这一点是因为对于你的form
标记,你主要使用单引号,并且只是双引号用于操作,这是一个非常好的主意,否则你的代码将容易受到XSS的攻击。要避免此问题,您可以使用htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
,也可以编码单引号。您仍然不能省略使用任何引号(如果这样做,防止XSS变得更加复杂,因为您需要转义所有可以突破该上下文的字符,其中包括空格{{1}等等,但有了这个,你可以使用双引号或单引号并且是安全的。
有关详细信息,请查看此网站有关XSS prevention的信息(它会告诉您此类编码的位置不够;您绝不应将用户输入放在+
,<script>
,HTML中注释,属性名称或标签名称。)