我是新手,只是要清楚。我听到很多关于逃避数据以防止XSS攻击的信息。我该如何做到这一点?如何在PHP中跳出输出
这是我在做什么现在 -
$s = mysqli_real_escape_string($connect,$_POST['name']));
难道这还不够?谢谢
我是新手,只是要清楚。我听到很多关于逃避数据以防止XSS攻击的信息。我该如何做到这一点?如何在PHP中跳出输出
这是我在做什么现在 -
$s = mysqli_real_escape_string($connect,$_POST['name']));
难道这还不够?谢谢
如果你将数据输出到HTML中,应该使用用htmlspecialchars() 否则,如果你存储在数据库中的数据,你应该使用mysqli_real_escape_string()逃脱串投下数(或使用预准备语句对于两者) 并且通过基于白名单的过滤来保护标识符/操作符。
如果以正确的方式使用它们,这两种方法都是您所需要的。
编辑您的答案,使其有帮助 – 2011-02-28 11:56:46
如果您刚刚开始修复您的代码以抵御攻击(意思是SQL注入攻击),那么您将更好地检出参数化查询。你基本上做的是将你的内容(输入)与命令(sql)分开,所以你不能让它们被一个可能的用户输入的信息(比如名字)混淆。
您可以尝试开始使用PDO
类: 你可以从这里开始阅读PDO
手册:http://php.net/manual/en/book.pdo.php而这个页面有一个很好的例子:http://php.net/manual/en/pdo.prepared-statements.php
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
不过,你不需要使用PDO
,您可以使用mysqli
也看到http://php.net/manual/en/mysqli.prepare.php
<?php
/* Script A -- We are already connected to the database */
$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?, 100)"); /* Query 1 */
mysqli_stmt_bind_param($stmt, "si", $string, $integer);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt); // CLOSE $stmt
?>
因为名字是一个单独的值,我t永远不会是一个SQL命令,所以你会自动安全的。
我该怎么做?对不起,很愚蠢。 – Chrism 2011-02-28 11:47:02
为你增加了一个例子和一些链接:) – Nanne 2011-02-28 11:49:28
这可以防止SQL注入攻击,而不是XSS攻击。 – geoffspear 2011-02-28 11:50:31
您应该使用htmlspecialchars的输出,而不是mysqli_real_escape_string。
你需要告诉我们你在处理数据。你是否将其插入数据库?或者在网站上输出它?您对数据所做的每件事都需要不同形式的卫生设施。 – 2011-02-28 11:47:17
@pekoe都....在一个文件中,我接受并插入...其他...我输出。 – Chrism 2011-02-28 11:47:57
现在考虑我要在数据库中插入$ s。它足够安全吗? – Chrism 2011-02-28 11:49:55