3

我一直在使用base64_encode<textarea>表单中保留 html 并将数据存储在数据库中。检索时base64_decode使用并将数据放入文本区域。不使用这是否安全mysql_real_escape_string()

mysql_real_escape_string在检索$_GETtemplate 的参数时使用id

templates.php?id=4

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

使用 base64 代替这是不好的做法mysql_real_escape_string()吗?

“错误的工作工具”?

注意:我htmlspecialchars($text, ENT_QUOTES);用于 xss。

4

2 回答 2

3

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

但是,我会养成始终SQL 转义任何查询中使用的任何参数或始终使用参数化查询开头的习惯(真的,与时俱进!)。它更简单,直接,当您更改代码时,它不会给您带来问题。

于 2012-05-18T08:31:33.070 回答
2

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

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

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

于 2012-05-18T08:41:38.047 回答