2012-06-24 38 views

回答

2

當您爲SQL語句轉義字符串時,並不一定意味着稍後查看數據時應該看到反斜槓。這意味着某些字符將被轉義,並且SQL語句將無誤地運行。與mysql_real_escape_string嘗試插入數據

LINE:557 https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Input.php

if (! is_php('5.4') && get_magic_quotes_gpc()) 
{ 
    $str = stripslashes($str); 
} 

然後

LINE:285 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php

$str = is_resource($this->conn_id) ? mysql_real_escape_string($str, $this->conn_id) : addslashes($str); 

該字符串是通過mysql_real_escape_string和addslashes通過。因此,我們可以說,考慮到SQL注入的安全措施。如果你想確保你的字符串保存之前被轉義

SELECT * FROM table1 WHERE field1 LIKE "some string with \" quotes" 

,可以考慮使用$this->db->escape*方法:

+0

呀mysql_real_escape_string並用htmlspecialchars逸出值,並將它們插入到數據庫(\\)。但我想知道如果codeigniter確實轉義它,但不顯示它在數據庫中。 – busycoding

+0

如果出現這種情況,您必須運行一個比5.3版本更早的PHP版本,並且在調用** mysql_real_escape_string **之前啓用了** magic_quotes_gpc **,它可能被CodeIgniter考慮並通過** stripslashes **。 –

+0

我很好奇,看着CodeIgniter。事實證明,我的猜測是正確的。現在編輯帖子。 –

0

BY「逃脫」他們的意思是要替換此:

SELECT * FROM table1 WHERE field1 LIKE "some string with " quotes" 

此: http://codeigniter.com/user_guide/database/queries.html

另外,檢查:

+0

是的,我遇到的唯一問題是,當我實際上向數據庫中插入值時,我看不到轉義版本。我更喜歡這樣。只是尋找確認,它實際上逃脫,所以SQL注入不會發生。我一直在讀這裏,你應該逃避輸出,而不是輸入。有了xss_clean,這裏有人反對,我希望人們提交像

  • 11. 笨SQL注入
  • 12. Codeigntier Active Record加入
  • 13. 轉換這個SQL查詢來笨的Active Record
  • 14. 笨的Active Record類錯誤VS MySQL的原始查詢
  • 15. 笨的Active Record:如何使用「設置」方法與MySQL功能
  • 16. 使用CodeIgniter的Active Record
  • 17. Azure SQL Server和Yii Active Record
  • 18. 使用CodeIgniter Active Record語句
  • 19. Codeigniter Active Record Class插入從
  • 20. Rails Active Record TimeZones
  • 21. Active Record .where.find_each
  • 22. ACTIVE RECORD REGULAR EXPRESSION
  • 23. 轉換SQL語句的Active Record語法
  • 24. 轉換SQL查詢的Active Record
  • 25. 如何使用Active Record Codeigniter使用where_in?
  • 26. 笨3 SQL注入查詢
  • 27. 使用實體框架的Active Record
  • 28. 更新使用Active Record的CI中
  • 29. 如何更改Mysql的插入連接查詢到笨的Active Record
  • 30. 笨的Active Record/MySQL查詢 - GROUP_BY導致返回只有一行