Php 在序列化和插入到数据库之前清理字符串
我面临一个奇怪的问题Php 在序列化和插入到数据库之前清理字符串,php,Php,我面临一个奇怪的问题 $string是用户输入 $log = serialize(array('string' => $string); 例如:“测试”将是 “字符串”;s:4:“测试” 但是,当用户提交引号和其他一些字符时会出现问题,例如; 当然,我首先转义字符串,但是序列化数据不能取消序列化 提交给db之前的htmlentities也不起作用,因为将数据弄乱 有什么建议吗 请不要告诉我创建db字段而不要使用serialize()我不确定这是否是最佳做法,但一个快速的破解方法是:在将数
$string
是用户输入
$log = serialize(array('string' => $string);
例如:“测试”将是
“字符串”;s:4:“测试”
但是,当用户提交引号和其他一些字符时会出现问题,例如;
当然,我首先转义字符串,但是序列化数据不能取消序列化
提交给db之前的htmlentities
也不起作用,因为代码>将数据弄乱
有什么建议吗
请不要告诉我创建db字段而不要使用serialize()
我不确定这是否是最佳做法,但一个快速的破解方法是:在将数据发送到db时加密数据,然后在检索数据时解密数据。现在,如果您认为使用base64进行加密可能存在安全问题,请使用以下链接以更好的方式进行加密:
在将用户输入插入数据库之前,您需要将其转义,这不仅是因为它会破坏您的应用程序,而且如果您不这样做,它是一个严重的安全漏洞
请阅读本文:
我强烈建议您在应用程序中使用,或者在转义上实现一个抽象,并始终在应用程序中使用它(例如使用mysqli\u real\u escape\u string
)。Erm:“当用户提交引号和一些其他字符时会出现问题,例如;”=>不,它们没有,请尝试。“清理”因为数据库完全依赖于您正在使用的任何数据库和数据库接口库。例如,如果使用Postgres,建议使用mysql\u real\u escape\u string()将毫无意义。如果您使用PDO,也将是完全冗余的。同样,使用HTMLenties进行DB消毒相当于使用汽油灭火。好主意,谢谢。我不知道会有什么安全问题,因为传输的不是敏感数据。encode-escape-db-decode-htmlintles。