在序列化和插入db之前清理字符串

时间:2012-01-29 02:00:12

标签: php

我面临一个奇怪的问题......

$string是用户输入

$log = serialize(array('string' => $string);

示例:“test”将是

  

“串”; S:4: “测试”;

但是当用户提交引号和其他一些字符时会出现问题; 当然我先转义字符串,但序列化的数据不能被反序列化。

提交给db之前的

htmlentities无法正常工作,因为;会弄乱数据......

有什么建议吗?

请不要告诉我创建数据库字段而不使用serialize()

2 个答案:

答案 0 :(得分:2)

我不确定这是否是最佳做法,但快速黑客会使用:http://php.net/manual/en/function.base64-encode.phphttp://www.php.net/manual/en/function.base64-decode.php在将数据发送到数据库时加密数据,然后在检索数据时对其进行解密。现在,如果你认为可能存在安全问题,那么使用base64进行加密是一个以更好的方式进行加密的链接: Best way to use PHP to encrypt and decrypt passwords?

答案 1 :(得分:1)

您需要在将用户输入插入数据库之前将其转义,这不仅是因为它可能会破坏您的应用程序,而且因为如果您不这样做,它会是严重的安全漏洞

请阅读这篇文章:http://phpsec.org/projects/guide/3.html#3.2

我强烈建议您在应用程序中使用PDO with prepared statements,或者在应用程序中实现抽象而不是在应用程序中使用它(例如使用mysqli_real_escape_string)。