使用htmlspecialchars从XSS强化

时间:2012-11-10 11:50:35

标签: php javascript sql-injection xss

我拥有一个网站,可以通过数据库发布问题和答案等论坛。我想加强我的代码以防止XSS和SQl注入..

对于XSS我使用了folloinf函数: 用strip_tags 用htmlspecialchars htmlentities

我的问题是:他们之间有什么区别?另外,我遇​​到的问题是: 1-我有一个textarea和带有默认文本的文本框 2-当使用上面的函数并且我在文本区域中输入任何测试时..输出将不会采用我在textarea中写的...它将始终采用默认值...

这就是我做的事情

$first_name = $_POST['first_name'];
$first_name = htmlspecialchars($first_name);
echo $first_name

另外,任何人都对防止SQL注入有任何想法,我根本不知道..

2 个答案:

答案 0 :(得分:0)

直接从手册。 http://php.net/manual/en/mysqli.prepare.php

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

    /* close statement */
    $stmt->close();
}

/* close connection */
$mysqli->close();
?>

对于XSS,strip_tags会这样做。除非有人破解您的FTP密码并且他们进入并编辑您的文件,或者如果您允许他们上传漏洞,请确保您在上传文件夹中禁用脚本执行。

答案 1 :(得分:0)

要防止XSS,您应该使用不同的过滤规则,具体取决于您输出的区域。

hmtlentities(将<翻译为&lt;)很好,但将不安全的变量输出到<head><script><style>标签;

另一个棘手的领域是像<input onMouseDown=""这样的标记属性,因为人们可以破坏你的字符串并添加他们自己的属性(就像SQL注入一样)。

以下地方深入讨论了这个问题:

http://adamjonrichardson.com/2012/02/01/improving-xss-cross-site-scripting-prevention-in-four-simple-steps/ https://www.golemtechnologies.com/articles/prevent-xss

您还可以考虑使用PHP的filter_var函数,非常有用。