【问题标题】:CodeIgniter 403 error instead of removing bad dataCodeIgniter 403 错误而不是删除坏数据
【发布时间】:2014-02-26 21:28:42
【问题描述】:

CodeIgniter 2.1.4

在对 CodeIgniter 的 XSS 保护进行了一些研究之后,我决定通过在我的 CodeIgniter 表单的任何输入字段中输入一些随机 HTML 来快速粗略地测试一下。

当我输入<script> 时,页面被重定向到服务器的默认 403 错误(“禁止访问”)页面。它甚至不是 CodeIgniter 错误页面。

我很高兴任何包含 <script> 的输入数据都已停止,但是,我不明白为什么这会生成 403 错误页面而不是验证错误,或者至少传递带有违规部分的数据被剥离了。

我使用htmlentities() 来转换< 和>,但这没有区别。

实现表单验证也没关系。 <script>的输入数据即使没有也会产生403错误。

谁能解释这里发生了什么,如果我需要担心这是如何处理/重定向的?对我来说,似乎我应该得到某种 CodeIgniter 验证错误或剥离数据而不是 403 错误。

这是我的一个控制器的简明版本。 (所有带有数据输入字段的控制器都会发生这种情况。)

public function search($search_slug = NULL)
{
    $this->load->library('form_validation');
    $this->form_validation->set_rules('search-terms', 'Search Terms', 'xss_clean');

    if ($this->input->post('search-terms') && ($this->form_validation->run() !== FALSE))
    {
        $search_slug = url_title(htmlentities($this->input->post('search-terms')), 'dash', FALSE);
    }

    if ($search_slug !== NULL)
    {

        $search_terms = preg_replace('/-/', ' ', $search_slug);

        $query = // get my results from model;

        if ($query['count'] > 0)
        {
            $data['results'] = $query['results'];       
        }
        else
        {
            $data['results'] = '<h3>Sorry, nothing found.</h3>';
        }
    }
    else
    {
        $data['results'] = '<h3>Please enter your search terms.</h3>';
    }

    $this->template->load('default', 'search', $data);
}

【问题讨论】:

  • 为什么你会对尝试探索 XSS 的人好?我认为一个丑陋的 403 就足够了。
  • @enapupe,我不是想对黑客好...我想了解正在发生的事情并确保我的代码足够安全。
  • 好的。你确定这是 CI 安全类工作吗?开机后就开始了?不是网络服务器吗?我是 CI 用户,从未见过这种行为..
  • @enapupe,如果我确定这一点,我就不会在这里问了。什么时候开始的,我不知道,因为我以前从未尝试过。
  • XSS 不会显示 403 错误,它只是清理您的输入并放入 [removed] 瞬间的 &lt;script&gt; 或任何已删除的内容。并且 403 是访问禁止问题不是 XXS 干净

标签: php codeigniter xss codeigniter-2 http-status-code-403


【解决方案1】:

在阅读了我的 OP 上的 cmets 并深入研究之后,这个 403 重定向似乎与 CodeIgniter 没有任何关系。

另外,在同一账号上安装 ZenPhoto 后,我在 ZenPhoto 搜索框输入&lt;script&gt; 时也看到了 403 重定向。

由于它是共享主机,我不能 100% 肯定地说这是 Apache 保护自己的结果,但所有证据似乎都指向那里。

【讨论】:

    【解决方案2】:

    这个字符是不允许的。 检查接受的答案@ SO - characters allowed in a url

    您的请求没有到达 index.php

    除此之外看看 application/config/config.php

    $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

    这些是您的应用程序在请求到达时允许使用的字符。

    【讨论】:

    • 不确定这在此处如何应用。使用 &lt;anything&gt; 时我没有收到 403 错误...仅使用 &lt;script&gt;。所以它肯定与允许的字符没有任何关系。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多