【问题标题】:Allow any character in URL允许 URL 中的任何字符
【发布时间】:2023-03-06 20:53:01
【问题描述】:

我想使用带有 codeIgniter 的 HTML/PHP 中的 Post 来传递 URL。因此,我在隐藏字段中输出了我的 URL 的 BASE64 编码,因为 URL 是从 Google 的响应页面抓取的,并且几乎任何字符都可以在 URL 中。由于我只会在本地服务器上使用我的网站(它是我公司的 SEO 工具),我想在 POST 数据中启用任何字符。我已经用$config['permitted_uri_chars'] = ''; 试过了,但是没有用。由于 Base64 字符串包含 =,因此出现“不允许的键字符”错误。

我正在使用 CodeIgniter 2

编辑:

Fivell 的回答是正确的,谢谢。因此,对于感兴趣的人,我从上面 Fivell 的链接中获取了代码,并为 CodeIgniter 编写了一个小类。为此,请将名为 Base64 的文件添加到您的 application/libraries 文件夹并插入以下代码:

<?php

class Base64 {

    function url_encode($url) {
        $data = base64_encode($url);
        $data = str_replace(array('+','/','='),array('-','_',''),$data);
        return $data;
    }

    function url_decode($url) {
        $data = str_replace(array('-','_'),array('+','/'),$url);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }

}

?>

然后,您可以通过$this-&gt;load-&gt;library('base64); 加载库并通过$this-&gt;base64-&gt;url_encode($url)$this-&gt;base64-&gt;url_decode($url) 对url 进行解密或解密,从而在任何控制器中使用它

【问题讨论】:

    标签: php codeigniter post base64 codeigniter-2


    【解决方案1】:

    http://www.php.net/manual/ru/function.base64-encode.php#63543

    我认为问题在于 php 中的标准 base64 编码/解码,这不是 url 安全的

    【讨论】:

      【解决方案2】:

      这不是 codeigniter 问题,base64 对 POST 传输不安全。我使用这对函数来安全地编码/解码 POST 数据。

      /**
       *
       * Safely encrypts data for POST transport
       * URL issues
       *  transforms + to spaces
       *  / are param value separators
       *  = are param value separators
       *
       *  we process the string on reverse
       * @param string $string
       */
      function my_urlsafe_b64encode($string)
      {
          $data = base64_encode($string);
          $data = str_replace(array('+','/','='),array('-','_','.'),$data);
          return $data;
      }
      
      /**
       *
       * The encoding string had to be specially encoded to be transported
       * over the HTTP
       *
       * The reverse function has to be executed on the client
       *
       * @param string $string
       */
      private function urlsafe_b64decode($string)
      {
        $data = str_replace(array('-','_','.'),array('+','/','='),$string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
          $data .= substr('====', $mod4);
        }
        return base64_decode($data);
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2021-11-01
        • 2014-11-23
        • 2018-10-25
        • 2021-01-23
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多