当前位置: 首页 > 面试题库 >

SQL注入保护

相俊迈
2023-03-14
问题内容

我想我会从您认为可以基本上消除SQL注入可能性的选项中获得您的意见(我认为)。

当前,我有我的管理员帐户,该帐户显然可以为我提供数据库的完整命令(更改,删除等)。我将拥有一个PHP使用的帐户,该帐户只能访问SELECT,UPDATE,DELETE,INSERT。如何为每个操作设置一个用户,然后仅在mysql_query语句中引用连接ID呢-
现在很明显,这将给服务器带来更多压力,本质上每页必须建立4个连接,但是如果安全性是重要的是,在我看来,通过将命令限制为要在这种情况下执行的EXACT函数,这将是一个有效的选择。关于此选项的可行性有何想法​​?

更新:正如我之前没有提到的那样,这不是防止SQL注入,mysql_real_escape_string(),准备好的语句等的唯一障碍。但是我只是想也许所有这些都失败了,不是吗?至少限制了他们可能造成的损害?(例如,在注册表上,他们将无法选择哈希或删除条目)。


问题答案:

不是
SQL注入的全部内容。每当您使用未在SQL查询中清除的参数时,都会使数据库保持开放状态以进行SQL注入,这不一定具有破坏数据的目的。也可能是窃取数据或获得未经授权的访问。

考虑一个非常受限制的帐户,它所能做的就是SELECT。您编写用于身份验证的查询:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

使用普通输入,您希望查询看起来像:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

如果用户名和密码均匹配,则应返回1作为计数。现在,攻击者尝试以管理员身份登录。由于您尚未清除输入内容,因此它们的发送方式$_POST['user']为:admin'; --。整个查询变为:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

之后的所有内容--均为注释,因此它将忽略其他条件并返回1。到了这里,您刚刚授予了恶意用户admin访问权限。这就是一些实际的攻击方式。您从低特权帐户开始,并通过安全漏洞尝试获取更多特权。

长话短说,具有限制特权,应用范围的帐户(例如:没有DROPALTER等)是很好的。永远不要给任何人或任何应用程序超出他们所需的特权。但是要防止SQL注入,请使用准备好的语句。



 类似资料:
  • 主要内容:SQL 注入的危害,SQL 注入示例,防止 SQL 注入SQL 注入是一种代码渗透技术,是最常用的网络黑客技术之一。SQL 注入非常危险,可能会导致数据库中的数据被暴露,甚至被损坏。 通过网页输入框(<input> 标签、<textarea> 标签等)将恶意 SQL 代码提交给服务器是最常见的 SQL 注入方式之一。 当网站要求输入诸如用户名(用户ID)之类的内容时,通常会发生 SQL 注入。黑客会输入一条 SQL 语句,而不是用户名/用户ID,当页面

  • 有使用 SQL 语句操作数据库的经验朋友,应该都知道使用 SQL 过程中有一个安全问题叫 SQL 注入。所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。 为了防止 SQL 注入,在生产环境中使用 OpenResty 的时候就要注意添加防范代码。 延续之前的 ngx_postgres 调用代码的使用,

  • 问题内容: public static bool TruncateTable(string dbAlias, string tableName) { string sqlStatement = string.Format(“TRUNCATE TABLE {0}”, tableName); return ExecuteNonQuery(dbAlias, sqlStatement) > 0; } 问题

  • 问题内容: 我正在尝试(合法地)利用具有SQLi漏洞的MariaDb数据库。 我在这里发现了漏洞… 将是脆弱的,并产生下列错误… 我正在使用Burp Suite,并采用了以下语法,该语法似乎更接近商标,但仍会产生语法错误。 我认为它离商标更近了,因为错误只会吐出我介绍的查询,而不是“额外”字段:。 我假设这是原始查询的一部分,因为它包含在内,当我使用其他随机字符串进行测试时,它仍然为真。 我从页面

  • 问题内容: 使用SQLAlchemy时减轻SQL注入攻击的最佳实践是什么? 问题答案: 如果您的数据中有任何“特殊”字符(例如分号或撇号),则SQLEngine对象会自动为您引用它们,因此您不必担心引用。这也意味着除非您有意绕过SQLAlchemy的引用机制,否则SQL注入攻击基本上是不可能的。 [每个http://www.rmunn.com/sqlalchemy- tutorial/tutori

  • 3.2. SQL 注入 SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞,一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假