如果一个潜在的攻击者知道我的数据库中的列名,他会怎么做?


what can a potential attacker do if he knows the column names in my database

我正在尝试用这个代码从数据库发送数据到客户端:

服务器端:

$prep = $pdo->prepare("SELECT * FROM user WHERE id=?");
$prep->execute([$_POST['id']]);
$user = $prep->fetch();
echo json_encode($user);
客户端

$.ajax({
   url : '/path/to/myaction',
   data : {id : id},
   complete : function(data){
       console.log(JSON.parse(data));
   }
});

结果类似于:

{id : 101,name : "Fudatura",birthdate : "1995/02/03",email : "fudatura@gmail.com"}

一切正常。我只是有点担心发布列结构。这是安全问题吗?我需要担心这个吗?

问题是:如果潜在的攻击者知道数据库中的列名,他会怎么做 ?

希望什么。它只是任意的名称。谁在乎那些名字是什么?这本身仍然不能让任何人访问他们不应该访问的任何内容。

已经说过,如果你的应用程序中有一个漏洞,允许别人访问他不应该访问的东西,例如SQL注入漏洞,知道数据库结构可以加速使用该漏洞做一些真正糟糕的事情。但是,仅仅混淆您的列名将不能增加任何实际的安全性,它可能只会减慢攻击者的速度,并迫使他们在黑暗中多戳一会儿。

从攻击者的角度来看这个非常好的攻击演练,以了解可能性。

底线是:不要麻烦了,它只会让你变得更加困难,而不会真正增加任何实际的安全性。你真正的弱点在别处。

如果你担心,你可以用别名重命名字段,只发送你需要javascript的字段。只要从你的选择中删除*,并将其替换为颜色和别名列表。

如果您不想暴露您的列结构,那么在json_encode之前运行$user变量的"for"循环,并创建您的自定义列数组。

相关文章: