直接在锚中使用数据库列名


Use a database column name directly inside an anchor

我有一个简单的安全问题,我就是找不到答案。

基本上,我想在某个列之后订购一个表。我这样做的方法是使用一个有两个额外部分的锚。目前,我在其中一个段中使用实际的列名,即我想要排序的列,但在这里我开始思考。

是这样处理的吗?对我来说,让别人访问我的某个表中的一些列名似乎是一个巨大的安全风险。但另一方面,我当然会逃避一切,这样他们就不会有任何机会做任何事情。不幸的是,我不是全能的,所以我可能做错了什么,我回到了安全风险;)

我该怎么做呢?是否应该使用其他类型的名称(如数字),稍后再将其转换回列名。还是我的方式可以?

哦,忘了说,我在php工作与codeigniter!

您可以使用白名单:在PHP中创建一个散列,将锚列名称映射到数据库列名称:

$mapping = array('col_a' => 'firstname', 'col_b' => 'lastname');

你也可以使用完全相同的名字,例如:'firstname'映射到'firstname'。然后使用anchor -column-name从映射散列中获取数据库列名。如果没有对应锚列名称的条目,则返回错误。这样,用户输入将被验证。

隐蔽的安全不是安全。

大量的网站使用开源的php应用程序,其中的数据库表和列是已知的。我不记得这在对网站的攻击中很有用。如果您有SQL注入问题,您不应该关心用户是否知道您的表结构,您最好删除SQL注入点。