【发布时间】:2014-01-28 12:18:46
【问题描述】:
我是一名初级 PHP 开发人员,目前正在与一个小团队一起开发一个项目。这是我第一次在团队中参与项目,所以我学到了很多东西并培养了团队合作技能。
我注意到我的开发人员同事做了一件具体的事情,我认为这可能会带来很大的安全风险。创建表单时,他们将为输入名称提供数据库中的列名。这意味着无论数据发布到哪里,他们都可以对通过 POST 数组的每个循环使用一个漂亮的方法。当然,它既漂亮又简单,但我是否希望用户看到列的名称?
我不确定它是否会带来安全风险(我首先想到的是 SQL 注入),但如果它确实存在,可以做什么?
我想你可以散列输入的名称吗?尽管如此,这并不完全是 100% 安全的。如果在表单页面中的名称是“apple64”、“banana99”、“chickens”,然后在 PHP 文件中它们被转换为相应的列名怎么办?
我的问题的重点是找到这个(可能的)安全漏洞的一般做法。
【问题讨论】:
-
当您将密码插入数据库时,它将是base64_encoded或使用md5,因此您的密码将是安全的。检查它是否为空或html特殊字符或html实体这都是sql注入
-
恕我直言,如果您记住不信任用户输入并验证输入,那么命名字段(如列)没有问题。此外,我认为这是一个很好的做法。这是团队中的新成员快速集成到代码中的好方法。想象一下,如果每个字段都提供了一个哈希名称,那么您需要自己翻译每个哈希值才能知道哪个是什么。
-
@DarkBee 当然,情况确实如此,但安全应该始终放在 IMO 首位。如果它不构成威胁,但我完全同意你的看法(我认为你的建议)
-
@AghaUmairAhmed MD5 和 base64 不安全...使用 >= 5.5.0 (php.net/manual/en/function.password-hash.php) 中提供的 password_hash 函数
-
在代码中包含列的名称绝不是不安全的。如果你只是为了它而混淆它们,那将是经典的通过默默无闻的安全。
标签: php security sql-injection