Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL注入保护_Sql_Security - Fatal编程技术网

SQL注入保护

SQL注入保护,sql,security,Sql,Security,我没有使用预先准备好的语句,如果没有必要,我也不想使用它 例如: $sqlServ = new mysqli(SQL_HOST, SQL_USER, SQL_PASS); $char = isset($_GET['char']) ? sanitize($_GET['char']) : null; $check = $sqlServ->query("SELECT name FROM player.player WHERE name LIKE '{$char}'"); function sa

我没有使用预先准备好的语句,如果没有必要,我也不想使用它

例如:

$sqlServ = new mysqli(SQL_HOST, SQL_USER, SQL_PASS);
$char = isset($_GET['char']) ? sanitize($_GET['char']) : null;
$check = $sqlServ->query("SELECT name FROM player.player WHERE name LIKE '{$char}'");

function sanitize($var)
{
    $var = htmlentities($var, ENT_QUOTES);
    $var = htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
    if (get_magic_quotes_gpc()) {
        $var = stripslashes($var);
    }
    return $var;
}
对于sql注入保护来说,这足够了吗? 谢谢你的回答

$var = htmlentities($var, ENT_QUOTES);
这是个坏主意。HTML编码用于输出阶段,您可以在HTML模板中使用变量。如果您试图在输入时处理这个输出时间问题,那么最终会得到数据库中不必要编码的输入,从而阻止您正确地匹配、切片和排序它。如果然后从数据库中输出内容而不转义,那么对于通过表单输入以外的方式输入的任何内容,仍然存在XSS错误

在创建HTML时进行HTML编码,而不是在其他时间

$var = htmlspecialchars($var, ENT_QUOTES, 'UTF-8');

嗯?它已经是HTML编码的,为什么要双重编码呢?这保证在将值放入查询中的字符串文字之前,会对值上的
&
real\u escape\u string()
等字符进行损坏。但这真的很容易忘记或出错。始终如一地使用参数化查询是一种更可靠的方法,也不会更困难。

no!保护代码不受SQL注入影响的唯一可靠方法是使用参数化查询,而不是将SQL语句连接在一起!不要浪费时间试图“过滤”或“净化”您的SQL-只需使用参数并完成它!不要偷懒,听marc_的建议,参数标记是最好的选择。这里有很好的解释: