像这样,
$type = mysqli_real_escape_string($dbc, trim($_POST['type']));
修剪是否提高了安全性,或者mysqli_real_escape_string是否已经足够了?
答案 0 :(得分:2)
mysqli_real_escape_string只会转义字符串以防止注入攻击。如果你不想要杂散的空白,你也应该修剪它。
答案 1 :(得分:2)
mysqli_real_escape_string 是不够的。
为表单输入
无论如何都不应该使用它
说到转义,mysql [i] _real_escape_string 不是 make-my-data-magicically-safe()类型的函数,但它只是转义 string 分隔符,到防止字符串被破坏。因此,例如,它对数字没有帮助 实际上,它与注入攻击无关,因为无论遇到什么攻击都应该使用此函数,但只能使您的字符串与SQL语法规则兼容。 它对查询的任何其他部分都没有帮助。
此外,它与“表单输入”无关,也与表格无关。它是与数据库相关的功能,而不是与表格相关的功能。 字符串 转到查询应该被转义,而不是其他任何内容。
无论如何它根本不应该被使用,因为你必须使用mysqli预备语句。
哦,是的 - trim()与安全性无关,而是使数据看起来整洁。
答案 2 :(得分:1)
使用mysqli_real_escape_string可以防止数据库中的注入。
向用户显示发布的值时,您应确保在其上使用htmlentities。
答案 3 :(得分:0)
答案 4 :(得分:0)
您的示例将有助于防止SQL注入,因为任何“特殊字符”都将被转义(因此“成为”等等),但不会阻止XSS(跨站点脚本),因为它仍然可能包含HTML字符如<和>
您可以使用以下代码来帮助防止这两种类型的攻击
<?php
//Get the variable
$userValue = $_GET['value'];
//Remove any preceding/leading whitespace
$userValue = trim($userValue);
//Convert any HTML characters to their entity value
$userValue = htmlspecialchars($userValue);
//Escape any SQL special characters
$userValue = mysqli_real_escape_string($dbc, $userValue);
?>
有关XSS的更多信息,请查看此链接https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
另一个有用的资源是这个PHP库,它旨在过滤任何用户输入以防止(几乎)所有XSS方法http://htmlpurifier.org/