我有 8 个输入类型文本。名称=favour_01
我将这 8 个输入
放入一个数组
中,然后将其序列化
我使用PDO
将其保存到数据库中。
然后将其反序列化以进行输出
$favour[]='apple'; $favour[]='banana';
$favours = serialize($favours);
prepare(...
$food->bindValue(':favours', $favours, PDO::PARAM_STR);
这安全吗?我读过序列化输入很容易受到攻击。
我没有为此使用任何类,这是我读过的一篇文章 https://www.owasp.org/index.php/PHP_Object_Injection
最佳答案
仅当序列化的数据包含敏感信息时,序列化数据才会存在安全风险。风险在于您序列化包含密码的数据,然后将序列化的表单存储在不安全的地方。
反序列化如果您尝试对从不受信任的来源获取的数据进行反序列化,则数据会存在安全风险。反序列化过程可以实例化对象,因此数据输入可能会执行您意想不到的操作。
从安全角度来看,您正在执行的序列化简单值数组以将其绑定(bind)到 SQL 参数的操作是可以的,但请记住,您将无法有效地在数据库中搜索特定值那个序列化的数组。基本上你的数据库变成了一个黑匣子:你可以将整个数组塞进去,然后取出整个数组来反序列化它,但是你不能用 SQL 轻松地读取或写入数组的单个元素。
最好的做法是创建一个子表并在该表中每行存储一个元素。
关于php - 使用 PDO 序列化数据是否危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253512/