首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中公开MySQL表名是否存在安全风险?

问在javascript中公开MySQL表名是否存在安全风险?
EN

Stack Overflow用户
提问于 2011-04-06 00:25:37
回答 5查看 1.6K关注 0票数 10

我有一个ajax方法,其工作方式是这样的

代码语言:javascript
复制
function getRow(tableName, idName, idValue, callback)

这样做的明显好处是,我有一个函数可以从任何表中检索数据。然而,从安全的角度来看,这感觉是错误的,这样做是否有安全风险?实际读取/操作数据库的相应PHP文件是通过先前的身份验证过程来保护的,因此从理论上讲,表名在真空中的可见性不应该是一种风险(更不用说数据库只接受本地主机连接),但我想知道是否没有更好/更漂亮的方法来实现这一点。

编辑:为了澄清身份验证过程,用户/角色安全性阻止访问除用户显式允许的表之外的所有表。

EN

回答 5

Stack Overflow用户

发布于 2011-04-06 00:30:25

单是表名并没有那么糟糕,但是,您所创建的API可能不是最好的主意……

仔细考虑是否有一些表是人们无法查询的,因为从它的外观来看,我可以从客户端查询数据库中的任何表。例如:

代码语言:javascript
复制
getRow('users', 'id', '7', function(data){console.log(data)})

如果users表返回他们的密码怎么办?即使它是散列的,这也不好。还是他们的电子邮件?如果我想收集所有的用户电子邮件呢?很简单的脚本,我可以写这样做。

票数 3
EN

Stack Overflow用户

发布于 2011-04-06 00:35:02

您可以在JS中显示例如users表名,但在服务器端添加前缀,如forum_users,这将是数据库中的实际表名。这样,如果有人找到注入点,他将尝试DROP TABLE users,如果您幸运的话,查询将失败:)

还为表和列添加了一个白色/黑名单,添加了限制1(不要循环),不要返回多个数组,您应该使用这样的内容进行消毒。

代码语言:javascript
复制
$select = preg_replace("#[\w]#", "", $_GET["select"]);
$from = preg_replace("#[\w]#", "", $_GET["from"]);
$where = preg_replace("#[\w]#", "", $_GET["where"]);
$equals = mysql_real_escape_string($_GET["equals"]);

$query = "SELECT $select FROM $from WHERE $where = '$equals' LIMIT 1";
票数 1
EN

Stack Overflow用户

发布于 2011-04-06 00:45:15

这是一种风险,因为它向攻击者提供信息。这与提供您正在使用的软件版本是一样的。这本身并不是一个漏洞,但它是一个漏洞的门。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5560165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档