如何保护网站免受xss(跨站点脚本)

时间:2015-04-12 12:09:19

标签: php mysql security xss protection

好的,所以我学会了一些PHP并尝试制作一个简单的应用程序,但我不确定我的网页是否可以免受xss和其他此类攻击。

我的PHP代码

<?php 
$title=$keywords=$description="";
$valid_er="";


if($_SERVER["REQUEST_METHOD"] == "POST"){

if(empty($_POST['title'])){

$valid_er="has-error";
}

else{
$title="&lt;title&gt;".test($_POST["title"])."&lt;title&gt;";
}


$keywords='&lt;meta name="keywords" content="'.test($_POST["keywords"]).'" /&gt;';
$description='&lt;meta name="description" content="'.test($_POST['description']).'" /&gt;';

}

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()

会保护我。

1 个答案:

答案 0 :(得分:1)

  

我只是想知道我是否容易受到跨网站脚本的攻击

不,你不是,在大多数情况下,只使用htmlspecialchars会保护你免受XSS攻击(如果你在属性周围使用双引号并遵循我上一段中的规则)。

您无需使用stripcslashes,也无需对自己的<等进行编码。

请注意,htmlspecialchars默认情况下不会对单引号(')进行编码。我之所以提到这一点是因为对于你的form标记,你主要使用单引号,并且只是双引号用于操作,这是一个非常好的主意,否则你的代码将容易受到XSS的攻击。要避免此问题,您可以使用htmlspecialchars($string, ENT_QUOTES, 'UTF-8');,也可以编码单引号。您仍然不能省略使用任何引号(如果这样做,防止XSS变得更加复杂,因为您需要转义所有可以突破该上下文的字符,其中包括空格{{1}等等,但有了这个,你可以使用双引号或单引号并且是安全的。

有关详细信息,请查看此网站有关XSS prevention的信息(它会告诉您此类编码的位置不够;您绝不应将用户输入放在+<script>,HTML中注释,属性名称或标签名称。)