2

我有8 input type text. name=favour_01

我把那些 8input变成一个arrayserialize

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

4

2 回答 2

2

只有当您序列化的数据包含敏感信息时,序列化数据才会存在安全风险。风险在于您序列化包含密码的数据,然后将序列化的表单存储在不安全的地方。

如果您尝试对从不受信任的来源获得的数据进行反序列化,则反序列化数据会带来安全风险反序列化过程可以实例化对象,因此数据输入可能会做您未预料到的事情。

从安全的角度来看,您为序列化一个简单的值数组以将其绑定到 SQL 参数所做的工作是可以的,但请记住,您将无法有效地在数据库中搜索该序列化数组中的特定值. 基本上你的数据库变成了一个黑盒子:你可以把整个数组塞进去,然后取出整个数组来反序列化它,但是你不能用 SQL 轻松地读取或写入数组的各个元素。

更好的做法是创建一个子表并在该表中的每行存储一个元素。

于 2013-06-22T17:51:16.713 回答
2

是的,如果您使用准备好的语句是安全的,然后在从数据库中检索数据到输出到浏览器之前验证数据。

于 2013-06-22T17:51:43.777 回答