【问题标题】:How to secure CodeIgniter URI segments when allowing all Characters with Oracle DB允许 Oracle DB 中的所有字符时如何保护 CodeIgniter URI 段
【发布时间】:2011-02-04 07:53:07
【问题描述】:

我从 CodeIgniter 获取 URI 段,并在查询 Oracle 数据库时使用它们。保护这些细分市场的方法是什么?因为我找不到 php 的 Oracle 转义方法(php 中的 MySQL 转义方法是 mysql_real_escape_string())。

顺便说一句,CodeIgniter 中的安全性真的像他们试图在配置文件中告诉你的那样极其危险吗?我认为只要您在使用您正在使用的数据库系统的任何查询中适当地转义这些 URI 段,它就是安全的,但我不知道我是否正确。

谢谢。

【问题讨论】:

  • 自从我上次看CI以来已经有一段时间了,但这不是ORM自动转义值吗?无论如何,仍然有老伙伴addlashes。这不是很好,也不是绝对防守,但仍然
  • 还有转义方法。嗯,我不太确定,但我认为你应该阅读一些关于 CI 异地的文档
  • 使用始终准备好的语句,这样您就可以绑定值而不必担心 SQL 注入,尤其是在您使用 Oracle 时。由于查询将被缓存在数据库端,因此也非常推荐使用准备好的语句而不是普通的 SQL
  • +1 表示准备好的语句。不仅绑定变量是 100% 安全的,并且允许在 Oracle 中缓存查询,而且它们还让 Oracle 每次都跳过代价高昂的硬解析。在这里您可以快速了解使用绑定变量的好处:akadia.com/services/ora_bind_variables.html

标签: php oracle security codeigniter escaping


【解决方案1】:

我建议使用 CI 查询绑定

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 

$this->db->query($sql, array($yourSegment1, $yourSegment2, $yourSegment3));

【讨论】:

  • 这在 Oracle 中并不像您希望的那样工作。该代码将允许“绑定”像' OR 1=1 -- 这样的字符串,只需将其添加到您真正不想要的查询中。如果不修改 oci8_driver.php 和其他一些 DB 驱动程序文件,Oracle 绑定变量似乎无法在 CI 中本地工作
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 2012-05-14
  • 2021-12-04
  • 2019-09-10
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多