我在php中使用PDO,因此无法使用准备好的语句对表名或列名进行转义。以下是自己实现的简单方法:
$tn = str_replace('`', '', $_REQUEST['tn']);
$column = str_replace('`', '', $_REQUEST['column']);
$sql = "SELECT * FROM `tn ` WHERE `column` = 23";
print_r(
$pdo->query($sql)->fetchAll()
);
还是仍然存在一些可以被攻击的途径?
您可以通过询问数据库哪些列对于给定的数据库表有效来使用动态白名单。这是一个附加的sql查询,但是安全性很好。
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = :databaseName
and TABLE_NAME = :tableName
获取该结果,然后确保所有动态列名称都在结果集中。
我认为包含在中INFORMATION_SCHEMA.COLUMNS
,因此它们应该只是简单的工作。
然后,在组装动态sql时,只需在经过验证的列名周围使用反引号即可(我假设您使用的是纯ascii列名,否则可能有其他注意事项)。
虽然可以在Java 8中序列化lambda,但强烈建议不要这样做;甚至不鼓励序列化内部类。给出的原因是lambdas可能无法在另一个JRE上正确反序列化。然而,这是否意味着有一种方法可以安全地序列化lambda? 例如,假设我定义一个类如下: 如果像这样声明了类的实例,则不应序列化它: 但如果我创建一个这样的类实例,会怎么样: 现在序列化是安全的吗?我的直觉告诉我,是的,它应该是安全的,因为没有理
问题内容: 我目前正在建立一个查询,其中字段/列和值部分都可能由用户输入的数据组成。 问题是转义字段名。我正在使用准备好的语句来正确地转义和引用值,但是在转义字段名时遇到了麻烦。 mysql_real_escape_string对我们来说需要mysql连接资源,因此被排除在外 PDO :: quote在字段名周围添加引号,这也使它们在查询中无用 加斜杠有效,但不是很安全 任何人都知道最好的方法是在
问题内容: 我有一个CSV导入到我们的数据库。“列”之一包含 应 为INT的数据,但某些行的数字仅落在BIGINT范围内(因为它们是来自我们合作伙伴之一的测试数据)。我们在内部存储INT,不希望更改。 我想从BIGINT安全地转换为INT。安全地说,如果发生算术溢出,则不会出现任何错误。如果转换成功,我希望我的脚本继续进行。如果失败,我希望它短路。我似乎无法弄清楚正确的语法。这就是我得到的: 我曾
BECOMING SECURE AND ANONYMOUS 今天,几乎我们在互联网上做的一切都被跟踪。无论是谷歌跟踪我们的在线搜索、网站访问和电子邮件,还是美国国家安全局(NSA)对我们的所有活动进行编目,无论谁在跟踪我们,我们的每一次在线活动都会被记录、编入索引,然后被挖掘出来,以造福他人。普通个人,尤其是黑客,需要了解如何限制这种跟踪,并在网上保持相对匿名,以限制这种无处不在的监视。 在本章中
简短版本: 我正在尝试创建: ,其中项目是可嵌入的,并且能够定义在项目表中为地图键创建的列名。Hibernate版本:5.0.12。最终的 完整解释: 以下是一个简化的示例,它再现了我的问题。我的出发点是的。 通过此映射,hibernate创建以下表: 到目前为止还不错。接下来,我尝试将列表转换为映射,并使用项。keyValue作为地图的键: 它可以工作,但在表中,映射的键列始终称为,我无法找到如
问题内容: 我想转换一个从Java中8是这样的: 因为我有一个字符串列表,所以我想创建一个Map,键是列表的字符串,值是Integer(零)。 我的目标是计算字符串列表的元素(在我的代码中稍后)。 我知道以“旧”方式进行转换很容易; 但我想知道是否还有Java 8解决方案。 问题答案: 如前所述,参数必须是函数,因此必须更改为(可以使用任何其他参数名称代替)。 但是请注意,如果中存在重复项,此操作