使用base64_encode而不是mysql_real_escape_string是否安全?

时间:2012-05-18 08:23:27

标签: php mysql

我一直在使用base64_encode来保存来自<textarea>表单的html并将数据存储在数据库中。检索后,使用base64_decode并将数据放入textarea。不使用mysql_real_escape_string()吗?

这样做是否安全?

我在检索模板mysql_real_escape_string的{​​{1}}参数时使用$_GET

id

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

使用base64而不是templates.php?id=4这是不好的做法吗?

“错误的工作工具”?

注意:我将mysql_real_escape_string()用于xss。

2 个答案:

答案 0 :(得分:3)

技术上base64_encode永远不会输出任何可用于SQL注入的内容。就此而言,这是安全的。

但是,我会习惯总是 SQL转义 任何查询中使用的任何参数,或者总是使用参数化查询开始与(真的,与时俱进!)。它更简单,更直接,当您更改代码时,它不会让您在以后遇到问题。

答案 1 :(得分:2)

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

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

您最好的选择是转移到更新的MySQL驱动程序(例如mysqliPDO),并使用预准备语句。如果由于某种原因无法做到这一点,请坚持使用mysql_real_escape_string