如果潜在攻击者知道我的数据库中的列名,他们可以做些什么

时间:2014-07-11 09:38:10

标签: javascript php security

我正在尝试使用以下代码将数据从db发送到客户端:

在服务器端:

$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"}

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

3 个答案:

答案 0 :(得分:3)

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

...

希望没事。它只是任意的名称。谁在乎这些名字是什么?这本身仍然无法让任何人访问他们无法访问的任何内容。

话虽如此, if 你的应用程序中有一个漏洞,允许某人访问他不应该访问的内容,例如:一个SQL注入漏洞,知道数据库结构可以加快使用该漏洞的速度。但是,只是模糊你的列名将添加任何实际的安全性,它可能只会让攻击者稍微放慢一点,并迫使他们在黑暗中捅一会儿。

从攻击者的角度查看攻击的this very nice walkthrough以了解可能性。

最重要的是:不要打扰,只是在没有实际添加任何实际安全性的情况下让自己变得更加困难。你真正的漏洞在其他地方。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果您不想公开列结构,则在json_encode之前为$ user变量运行“for”循环并创建自定义列数组。