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

How to protect a website from xss (Cross site scripting)

好的,所以我学到了一些 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()

会保护我的。

I just wanted to know am i vulnerable to cross site scripting

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

不需要使用stripcslashes,也不需要自己编码<

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

有关更多信息,请查看有关 XSS prevention 的网站(它会告诉您这种编码的不足之处;您永远不应将用户输入放在 <script><style> 中, HTML 注释、属性名称或标签名称)。