Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/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/5/sql/84.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
Mysql 更改表名以避免SQL注入攻击_Mysql_Sql_Database_Sql Injection - Fatal编程技术网

Mysql 更改表名以避免SQL注入攻击

Mysql 更改表名以避免SQL注入攻击,mysql,sql,database,sql-injection,Mysql,Sql,Database,Sql Injection,我了解SQL注入攻击的基本过程。我的问题与SQL注入预防有关。我被告知,防止此类攻击的一种方法是频繁更改表名!可能吗 如果是这样的话,有人能给我提供一个链接,让我更多地了解它,因为我在网上找不到关于它的解释。没有。这毫无意义。您要么必须更改引用该表的每一行代码,要么必须保留类似于视图的内容,该视图具有与旧表完全相同的旧表名。没有一个通情达理的人会那样做。另外,这并不是说有很多合理的表格名称,所以你会做一些疯狂的事情,比如说表格a存储客户数据,AA存储雇主数据,AAA是客户和雇主之间的交集 SQL

我了解SQL注入攻击的基本过程。我的问题与SQL注入预防有关。我被告知,防止此类攻击的一种方法是频繁更改表名!可能吗


如果是这样的话,有人能给我提供一个链接,让我更多地了解它,因为我在网上找不到关于它的解释。

没有。这毫无意义。您要么必须更改引用该表的每一行代码,要么必须保留类似于视图的内容,该视图具有与旧表完全相同的旧表名。没有一个通情达理的人会那样做。另外,这并不是说有很多合理的表格名称,所以你会做一些疯狂的事情,比如说表格
a
存储客户数据,
AA
存储雇主数据,
AAA
是客户和雇主之间的交集


SQL注入几乎很容易防止。将准备好的语句与绑定变量一起使用。不要动态生成SQL语句。完成。当然,在现实中,确保新开发人员不违反这条格言,或者因为他们不知道更好的东西,或者因为如果他们只做一点字符串连接,他们可以在更短的时间内完成一些事情,这会使事情变得更复杂。但是基本方法非常简单。

Pffft。什么?频繁更改表名

就“防止SQL注入”而言,这是错误的建议

SQL注入漏洞的唯一预防措施是编写不易受攻击的代码。在绝大多数情况下,这是很容易做到的

更改表名不会关闭SQL注入漏洞。它可能使一个成功的攻击向量不可重复,要求攻击者做出一些调整。但它并没有阻止SQL注入



作为研究SQL注入的起点,我推荐OWASP(开放式Web应用程序安全项目)

从这里开始:


如果您遇到“更改表名”作为缓解措施,请告诉我。我从来没有遇到过将其作为SQL注入漏洞的预防或缓解措施。

以下是可以防止SQL注入的措施:

使用ORM封装SQL调用,并为数据库记录提供友好的层。其中大多数都非常擅长编写高质量的查询,并且仅仅因为您如何使用它们就可以保护您免受注入错误的影响

尽可能将准备好的语句与占位符值一起使用。编写如下查询:

INSERT INTO table_name (name, age) VALUES (:name, :age)
非常小心地对通过任何其他方法插入到SQL中的任何和所有值进行正确的转义。这总是一件危险的事情,因此,任何像这样编写的代码都应该有任何转义,使之变得非常明显,以便快速检查代码可以验证它是否正常工作。永远不要隐藏在抽象或具有可爱名称的方法后面,如
scrub
clean
。这些方法可能会被巧妙地打破,你永远不会注意到

绝对确保任何表名参数(如果是动态的)都是相对于已知良好值的白名单进行测试的。例如,如果可以创建多个类型的记录,或将数据放入多个表中,请确保提供的参数有效

信任用户提供的任何内容。假设每一点数据都被污染了,并且充满敌意,除非你费心清理它。如果数据库是从其他来源获得的,比如继承历史项目,那么数据库中的任何内容都会受到双重影响。偏执并非毫无根据,这是意料之中的

编写代码时,删除一行不会引起安全问题。这意味着永远不要这样做:

$value = $db->escaped(value);
$db->query("INSERT INTO table (value) VALUES ('$value')");
你离失败只有一步之遥。如果必须这样做,请这样写:

$value_escaped = $db->escaped(value);
$db->query("INSERT INTO table (value) VALUES ('$value_escaped')");
这样,删除执行转义的行不会立即导致注入错误。这里的默认设置是安全故障

尽一切努力阻止对数据库服务器的直接访问,方法是积极地对其进行防火墙保护,并限制对实际需要访问的用户的访问。实际上,这意味着阻塞端口3306并使用SSH进行任何外部连接。如果可以,消除SSH并使用安全VPN连接到它

永远不要生成会喷出堆栈跟踪的错误,这些堆栈跟踪通常包含对攻击者非常有用的信息。例如,包含表名、脚本路径或服务器标识符的错误提供的信息太多。将这些消息用于开发,并确保在生产服务器上抑制这些消息

随机更改表名是完全没有意义的,这会使您的代码成为一场噩梦。要使所有代码与表在任何特定时刻假定的任何随机名称保持同步都是非常困难的。如果没有某种解码器工具,备份和恢复数据几乎是不可能的

任何建议这样做的人都是在为已经解决的问题提出一个毫无意义和天真的解决方案


随机更改表名可以修复任何问题,这表明人们对SQL注入错误的形式缺乏了解。知道表名是一件很好的事情,它使攻击者的生活更轻松,但许多攻击不需要知道这一点。一种常见的攻击是通过在
条件中插入附加子句来强制以管理员身份登录,其中
表名是不相关的。

更改表名以防止SQL注入听起来有点像不断更改法拉利的颜色,这样法拉利就不会被盗。一个对SQL注入非常健壮的应用程序将能够阻止所有试图窥探安全数据的恶意查询,就像一个