下午好,
我对CodeIgniter的安全性有一些疑问,首先是:
我有一个控制器:news.php,其中有一个名为view的方法
例:
class News extends CI_Controller{ public function view( $id ) { $this->load->model('news_model'); $this->news_model->get_by_id( $id ); // ... } }
这种工作形式安全吗?没有URL注入SQL的风险?考虑到这个页面被访问,所以mywebpage/news/number_id.过滤intval()或不必要的过程会很有趣吗?
我的第二个问题是:
默认情况下,CodeIgniter xss过滤器可以发布和获取,但未知的是通过CodeIgniter过滤HTML的方法,我在CodeIgniter中创建了一个帮助器,有一些类似于本机CodeIgniter的方法吗?
function remove_xss_html($string){ if( is_array( $string ) ){ $return_array = array(); foreach( $string as $item ) { if(!get_magic_quotes_gpc()) { $return_array[] = addslashes( htmlspecialchars( strip_tags( $item ) ) ); } else { $return_array[] = htmlspecialchars( strip_tags( $item ) ); } } return $return_array; } else { return htmlspecialchars( strip_tags( $string ) ); } }
第三个也是最后一个问题是:
如果我将变量$ this-> input-> post('my_var')直接发送到没有过滤器的数据库,我冒着sql注入的风险?CodeIgniter或过滤器如此安全?
IMPORTANTE:我的英语不是很好,我用google翻译并修复了我的能力.
谢谢你们 ...
如果您使用Active Record类进行数据库交互,则数据将自动转义:
除了简单性之外,使用Active Record功能的一个主要好处是它允许您创建独立于数据库的应用程序,因为查询语法是由每个数据库适配器生成的.它还允许更安全的查询,因为系统会自动转义值.
如果没有,并且您手动运行查询,则需要自行转义.
关于你的功能的一些建议:
public function view( $id ) { $this->load->model('news_model'); $this->news_model->get_by_id( $id ); // ... }
如果$id
URL中不存在,您将收到错误通知.设置默认值:
public function view( $id = NULL )
然后检查控制器中的值.例:
if ( ! $id) { redirect('somwhere/else'); }
此外,请确保在继续之前得到结果(false
如果没有找到记录,我假设您的模型返回此处):
$record = $this->news_model->get_by_id( $id ); if ( ! $record) // redirect with error message or something
您可以根据需要验证$id
s类型或完整性,但为了简单起见,我只是将其传递给模型,false
如果没有找到记录则返回.