当前位置: 首页 > 知识库问答 >
问题:

“mysqli_real_escape_string”是否足以避免SQL注入或其他SQL攻击?

易阳朔
2023-03-14

这是我的代码:

  $email= mysqli_real_escape_string($db_con,$_POST['email']);
  $psw= mysqli_real_escape_string($db_con,$_POST['psw']);

  $query = "INSERT INTO `users` (`email`,`psw`) VALUES ('".$email."','".$psw."')";

有人可以告诉我它是否安全,或者它是否容易受到SQL注入攻击或其他SQL攻击吗?

共有1个答案

林玮
2023-03-14

有人可以告诉我它是否安全,或者它是否容易受到SQL注入攻击或其他SQL攻击吗?

不,正如uri2x所说,请参阅SQL绕过mysql_real_escape_string()的注入。

防止SQL注入的最佳方法是使用预准备语句。它们将数据(您的参数)与指令(SQL查询字符串)分开,并且不会为数据污染查询结构留下任何空间。预准备语句解决了应用程序安全的基本问题之一。

对于不能使用预准备语句的情况(例如< code>LIMIT),为每个特定目的使用非常严格的白名单是保证安全性的唯一方法。

// This is a string literal whitelist
switch ($sortby) {
    case 'column_b':
    case 'col_c':
        // If it literally matches here, it's safe to use
        break;
    default:
        $sortby = 'rowid';
}

// Only numeric characters will pass through this part of the code thanks to type casting
$start = (int) $start;
$howmany = (int) $howmany;
if ($start < 0) {
    $start = 0;
}
if ($howmany < 1) {
    $howmany = 1;
}

// The actual query execution
$stmt = $db->prepare(
    "SELECT * FROM table WHERE col = ? ORDER BY {$sortby} ASC LIMIT {$start}, {$howmany}"
);
$stmt->execute(['value']);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

我假设上面的代码不受SQL注入的影响,即使在模糊的边缘情况下也是如此。如果您使用的是MySQL,请确保打开模拟并关闭它。

$db->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
 类似资料:
  • 问题内容: 这是我的代码: 有人可以告诉我它是否安全或是否容易受到SQL Injection攻击或其他SQL攻击吗? 问题答案: 有人可以告诉我它是否安全或是否容易受到SQL Injection攻击或其他SQL攻击吗? 正如uri2x所说的,请参阅SQL注入。 防止SQL注入的最佳方法是使用准备好的语句。它们将数据(您的参数)与指令(SQL查询字符串)分开,并且不会为数据留下任何空间污染查询的结构

  • 什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。 而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的

  • 本文向大家介绍什么是sql注入?如何避免sql注入?相关面试题,主要包含被问及什么是sql注入?如何避免sql注入?时的应答技巧和注意事项,需要的朋友参考一下 用户根据系统的程序构造非法的参数从而导致程序执行不是程序员期望的恶意SQL语句。使用参数化的SQL就可以避免SQL注入。 详细参考复习ppt。举例子,摆事实! 1' or 1=1

  • 问题内容: 我使用一个简单的cms作为我网站的后端,在那里我可以更新新闻等。我想对SQL注入安全,所以我想知道这段代码是否被认为是安全的,或者是否可以做一些使其更安全的事情: 谢谢,祝你有美好的一天! 问题答案: 您没有在消毒 。 做一个就可以了,或(更好)拒绝共处理如果ID不是整数(假设ID是一个字段)。

  • 问题内容: 在PHP手册中,有一条注释: 注意:如果不使用此功能对数据进行转义,则该查询容易受到SQL注入攻击的攻击。 这足以进行反SQL注入吗?如果没有,您能举个例子和一个好的反SQL注入解决方案吗? 问题答案: 通常足以避免SQL注入。不过,这确实取决于它是否没有错误,即它 存在 脆弱性的可能性很小(但是这还没有在现实世界中体现出来)。准备好的语句是在概念上完全排除SQL注入的更好的替代方法。

  • 问题内容: 我知道PreparedStatements避免/防止SQL注入。它是如何做到的?使用PreparedStatements构造的最终表单查询是否为字符串? 问题答案: SQL注入的问题在于,用户输入被用作SQL语句的一部分。通过使用准备好的语句,您可以强制将用户输入作为参数的内容(而不是SQL命令的一部分)进行处理。 但是,如果您不使用用户输入作为已准备好的语句的参数,而是通过将字符串连