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

SQL注入如何工作以及如何防止它[重复]

吕英豪
2023-03-14
问题内容

这个问题已经在这里有了答案

9年前关闭。

可能重复:
什么是SQL注入?

我看到很多php代码在stackoverflow上四处飘荡,字符串的转义太少了。

谁能

  1. 说明什么是SQL注入;
  2. 说明它可以对您的服务器,数据和代码执行的操作;
  3. 举例说明如何执行SQL注入
  4. 给php示例代码如何防止SQL注入

问题答案:

我也无法抗拒。

SQL注入是“一种代码注入技术,可利用应用程序数据库层中发生的安全漏洞”。换句话说,它的SQL代码 注入 作为一个查询中用户输入。

SQL注入可以操纵数据(删除,更新,添加ecc …)以及破坏或删除数据库表。虽然我不知道SQL注入操作脚本。

假设在您的PHP脚本中,您期望(作为用户输入)登录表单中的用户名和密码,这些名称和密码稍后将在查询中使用,例如:

SELECT Id FROM Users WHERE Name = $name AND Password = $password;

用户可以在里面插入$name$password任何他喜欢的(例如槽的<input>)。假设他添加了一个名称,例如“ 1 OR 1 = 1; --”,查询现在将如下所示:

SELECT Id FROM Users WHERE Name = 1 OR 1 = 1; -- AND Password = $password;

然后,;可以添加另一个查询或使脚本认为用户名和密码确实存在。

注意,这-- AND Password = $password;是一个SQL注释,因此将被忽略。

如果您使用的是PHP <5,则应mysql_real_escape_string()先将其查找并使用它来转义用户输入,然后再将其嵌入查询中。

如果您使用的是PHP5
+,则应使用PDO或mysqli扩展名,它们可以通过准备好的语句来防止此问题。



 类似资料:
  • 注意:但凡是sql注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成sql语句的一部分,对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的【外部数据不可信任】的原则,纵观web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的,所以自然能想到,就是变量的检测、过滤、验证下手,确保变量是开发者所预想的。 1、检

  • 本文向大家介绍ThinkPHP如何防止SQL注入?相关面试题,主要包含被问及ThinkPHP如何防止SQL注入?时的应答技巧和注意事项,需要的朋友参考一下 (1)查询条件尽量使用数组方式,这是更为安全的方式; (2)如果不得已必须使用字符串查询条件,使用预处理机制; (3)使用绑定参数 (4)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了) (5)使

  • 问题内容: 我是erlang的新手,我需要编写一些代码来在MySQL数据库中插入行。如何使用Erlang防止SQL注入?是否还有其他语言的预备陈述之类的东西,或者我应该怎么做? 多谢您的回覆。 问题答案: 该答案取决于您使用的驱动程序。 Erlang ODBC具有param_query函数,该函数将一组参数绑定到查询,并且还可能转义所有SQL特殊字符。 erlang-mysql-driver已经准

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就

  • 问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。

  • 问题内容: 我目前正在使用以下查询来使用php获取mysql中的值: 该代码正在运行,但是现在我担心sql注入。 如何防止SQL注入? 这样安全吗? 问题答案: 来自WordPress Codex,关于保护查询免受SQL注入攻击 : 如果进一步向下滚动,则有一些示例。 您还应该阅读数据库验证文档 ,以更全面地了解WordPress中的SQL转义。