如果一个潜在的攻击者知道我的数据库中的列名,他会怎么做?
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"循环,并创建您的自定义列数组。
相关文章:
- 解析云代码作业:删除在数据库中已经存在一个小时的行
- 当张贴到数据库时,I'我得到了一个“;可以't在它们被发送错误之后设置报头”;
- 在不使用循环的情况下,从一个数据库字符串值向javascript数组添加多个对象
- 为什么我从一个空的mongodb数据库中获取数据
- SuiteScript:如何有一个自定义的数据字段来从数据库加载信息
- 如何根据 jsp 中数据库中的值在下拉列表中选择一个值
- 两个服务器可以访问一个公共的mongoDB数据库吗?
- 如何使用一个代码库在线和离线访问 HTML5/JS 应用程序中的数据库
- HTML5数据库保存了详细信息以及一个按钮
- 从另一个选择框并使用数据库连接填充选择框
- 我有一个mysql的输入文本字段.那么,如何通过ajax从数据库中输出json表呢
- 检测圆圈内的标记gmap3,只返回数据库中的最后一个标记
- Rails——在每个数据库条目中运行一个javascript
- 为什么我可以添加一个新主题,但我可以't向SQLite数据库添加新注释
- 我想单击一个
- 并获取 id 以通过 POST 将其插入数据库,可以吗?
- 将数据库存储/备份到一个文件中,IndexeDB、WebSQL和SQLlite的区别
- 我想显示数据库中的数据.如果我们新添加一个表单数据,我想附加显示的新帖子而不使用代码点火器刷新
- 如何使用 html 表单中的一个文本字段来搜索数据库表中的任何列
- 如何为每个 Web 套接字仅使用一个数据库连接
- 2个安卓应用程序的数据库(一个Java,另一个Javascript)