php - codeigniter 中的安全性

标签 php codeigniter sql-injection

下午好

我对 CodeIgniter 的安全性有一些疑问,第一个是:

我有一个 Controller :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 注入(inject)的风险?考虑到访问此页面,所以 mywebpage/news/number_id。通过intval()过滤会很有趣还是没必要?

我的第二个问题是:

默认CodeIgniter xss过滤器可以post和get,但是不知道CodeIgniter过滤HTML的方法,我在CodeIgniter中创建了一个helper down,有一些类似于原生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 注入(inject)的风险吗? CodeIgniter 或过滤器如此安全?

重要提示:我的英语不是很好,我使用了谷歌翻译并尽可能地修复了。

谢谢大家...

最佳答案

如果您使用的是 Active Record数据库交互类,数据将自动转义:

Beyond simplicity, a major benefit to using the Active Record features is that it allows you to create database independent applications, since the query syntax is generated by each database adapter. It also allows for safer queries, since the values are escaped automatically by the system.

如果不是,并且您正在手动运行查询,则需要自行转义。

关于您的功能的一些建议:

public function view( $id )
{
    $this->load->model('news_model');
    $this->news_model->get_by_id( $id );
    // ...
}

如果 URL 中不存在 $id,您将收到错误通知。设置默认值:

public function view( $id = NULL )

然后检查 Controller 中的值。示例:

if ( ! $id)
{
    redirect('somwhere/else');
}

此外,请确保在继续之前获得结果(如果未找到记录,我假设您的模型在此处返回 false):

$record = $this->news_model->get_by_id( $id );
if ( ! $record) // redirect with error message or something

您可以根据需要验证 $id 的类型或完整性,但为了简单起见,我只是将其传递给模型并返回 false 如果没有找到记录。

关于php - codeigniter 中的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946199/

相关文章:

php - 显示最后 4 个表条目 mysql php

codeigniter 从表单中获取值

asp.net - 避免 SQL Server 中的盲 SQL 注入(inject)漏洞的最佳实践 - ASP.Net

php - 防止注入(inject): Using prepared statements and parameters in a function - syntax error

php - Laravel 时间 24 小时格式正则表达式错误(无结束分隔符)

PHP 的 filter_input() 剥离外部主机上的 $_SERVER 数据,但适用于本地主机

php - MySQL 查询每 60 秒重新启动一次?

php - 如何为 Multi-Tenancy SaaS产品设计有效的数据库?

mysql - 允许用户使用 Codeigniter 每天提交数据 3 次

sql - 用于解码 SQL 注入(inject)尝试、定位漏洞的工具