Символ процента заменен в Codeigniter - PullRequest
4 голосов
/ 04 января 2012

В Codeigniter я отправляю строку, используя метод POST, как "%100", и она становится "0".Я полагаю, что это потому, что они обрабатываются как закодированные, но это не так.

Есть ли возможность отменить это, сохраняя высокий уровень безопасности, так как это, вероятно, вызвано Security->xss_clean() и Common remove_invisible_characters()

Ответы [ 3 ]

3 голосов
/ 08 ноября 2012

Просто поищите функцию remove_invisible_characters (), определенную в systemIdor / Common / php CodeIgniter, которая вызывается функцией CI_Input :: _ sanitize_globals ()Он отвечает за очистку некоторых escape-последовательностей, начинающихся с "%".Я предпочитаю переопределять класс ввода, чтобы отключить автоматическую очистку глобалов.

1 голос
/ 05 января 2012

Вместо удаления функции rawurldecode вы можете создать свой собственный класс MY_Security, который затем сможете использовать для переопределения функции xss_clean. Возможно, используйте функцию rawurlencode PHP перед вызовом родительской родительской функции xss_clean. Примерно так:

<?php

class MY_Security extends Security {

    function MY_Security() {
        parent::Security();
    }

    public function xss_clean($str, $is_image = FALSE) {
        $str = rawurlencode($str);
        return parent::xss_clean($str, $is_image);
    }

}

?>

Это закодирует значение, так что когда оно будет декодировано родительской функцией, вы получите исходное значение, которое вы отправили.

0 голосов
/ 04 января 2012

Я считаю, что проблема здесь не в CI или даже в PHP, а в вашем HTTP-запросе.

Допустим, я делаю POST-запрос, который выглядит следующим образом:

POST /path/to/file HTTP/1.1
Host: server.com
User-Agent: Bob the browser/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

name=Dave&percentage=%100

Вероятно, вы ожидаете, что $_POST будет выглядеть так:

Array
    (
        [name] => Dave
        [percentage] => %100
    )

Но на самом деле PHP (правильно) расшифрует его так:

Array
    (
        [name] => Dave
        [percentage] => 0
    )

Это связано с тем, что %10 является допустимой строкой, закодированной в URL, и будет переведено в непечатаемое и в этом контексте бессмысленное Символ «Data Link Escape» , ASCII 0x10 .

Чтобы получить ожидаемый результат, запрос должен быть таким:

POST /path/to/file HTTP/1.1
Host: server.com
User-Agent: Bob the browser/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

name=Dave&percentage=%25100

Таким образом, значение, которое вы на самом деле отправляете в теле POST, равно %25100. Это будет правильно декодировано как %100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...