我正在阅读Code Igniter的文档,想知道我是否做到了这一点:
每次使用$ this-> input-> post(x,TRUE)而不是$ _POST
最好使用PDO。如果没有,请在查询前执行$ this-> security-> xss_clean()然后再使用$ this-> db-> escape()。
使用bcrypt代替其加密系统
另外,要重新填充表单,我可以将post(x,TRUE)放在输入的value =“”字段中,还是必须通过prep_for_form()?
他们应该写一篇关于如何使用CodeIgniter处理数据的文档。
编辑:显然CodeIgniter的ActiveRecords已经逃脱了所有内容,所以不需要使用db-> escape()......EDIT2:显然form_validation也会逃脱。所以在完成form_validation之后做一个htmlspecialchars会双重逃避...我在这里发布了这个问题:https://github.com/EllisLab/CodeIgniter/issues/2230
答案 0 :(得分:1)
1)是的,否则您可以在config.php
文件中启用全局XSS过滤,因此使用输入法访问参数将始终被转义。
2)CodeIgniter的Query Builder已经进行了转义,如果您使用驱动程序编写自己的SQL查询,则只需要使用$this->db->escape()
函数(例如,$this->db->query("SELECT * FROM users WHERE id = '" . $this->db->escape($this->input->post('id')) . "' LIMIT 1");
3)使用Bcrypt。如果你有PHP 5.3.7+,那么你可以使用this library,这将提供与PHP 5.5中内置Bcrypt函数的向前兼容性。