Php 使用base64_encode而不是mysql_real_escape_字符串安全吗?

Php 使用base64_encode而不是mysql_real_escape_字符串安全吗?,php,mysql,Php,Mysql,我一直在使用base64\u encode保存表单中的html,并将数据存储在数据库中。检索时,使用base64\u decode,并将数据放入文本区域。不使用mysql\u real\u escape\u string()这样做安全吗 当检索模板id的$\u GET参数时,我确实使用了mysql\u real\u escape\u string templates.php?id=4 但是,使用base64保留html也会保留可能添加到textarea中的任何恶意sql代码。到目前为止,我没有遇

我一直在使用
base64\u encode
保存
表单中的html,并将数据存储在数据库中。检索时,使用
base64\u decode
,并将数据放入文本区域。不使用
mysql\u real\u escape\u string()
这样做安全吗

当检索模板
id
$\u GET
参数时,我确实使用了
mysql\u real\u escape\u string

templates.php?id=4

但是,使用base64保留html也会保留可能添加到textarea中的任何恶意sql代码。到目前为止,我没有遇到任何问题

使用base64而不是
mysql\u real\u escape\u string()
,这是一种糟糕的做法吗

“工作用的工具不对”


注意:我使用
htmlspecialchars($text,entu引号)
用于xss。

从技术上讲
base64_encode
永远不会输出任何可用于SQL注入的内容。到目前为止,它是安全的


然而,我会养成一种习惯,总是对任何查询中使用的任何参数进行SQL转义,或者总是从参数化查询开始(真的,与时俱进!)。它更简单,更直接,以后更改代码时不会出现问题。

是的,base64字符串在数据库中使用是安全的。但它也有一些缺点

  • 每次字符串进入/存在数据库时,您都需要对其进行编码和解码,而当您转义/准备它时,您只需要执行一次
  • 你在浪费空间。base64字符串比原始字符串大约33%

您最好的选择是使用更新的MySQL驱动程序(例如
mysqli
PDO
),并使用预先准备好的语句。无论什么原因都不可能,请坚持使用
mysql\u real\u escape\u string

请停止使用古老的
mysql\u*
函数编写新代码。它们不再得到维护,社区已开始恢复。相反,您应该学习准备好的语句,并使用或。如果您想学习,。您真的想在数据库中存储base64 Blob吗?它不仅浪费空间,还阻止您对数据库中的数据进行任何操作。@deceze没关系。我不在存储的html上运行查询,但mysql的其他部分我会运行查询。@Truth抱歉。我确实计划迁移到mysqli,但目前这只是一个小项目。我创建了一个旧的mysql数据库类,但我可以轻松地将其移植到mysqli。我只是还没准备好。感谢您的关注。不过,如果您像OP一样透明地传递text/html,您必须注意xss漏洞。