我面临一个奇怪的问题......
$string
是用户输入
$log = serialize(array('string' => $string);
示例:“test”将是
“串”; S:4: “测试”;
但是当用户提交引号和其他一些字符时会出现问题; 当然我先转义字符串,但序列化的数据不能被反序列化。
提交给db之前的 htmlentities
无法正常工作,因为;
会弄乱数据......
有什么建议吗?
请不要告诉我创建数据库字段而不使用serialize()
答案 0 :(得分:2)
我不确定这是否是最佳做法,但快速黑客会使用:http://php.net/manual/en/function.base64-encode.php和http://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
)。