Php 如何修复codeigniter中的易受攻击问题?(权限提升、会话重播攻击和HST丢失)

Php 如何修复codeigniter中的易受攻击问题?(权限提升、会话重播攻击和HST丢失),php,codeigniter-3,burp,Php,Codeigniter 3,Burp,我有codeigniter web应用程序。当我用burp-suite扫描应用程序时,我面临一些安全问题。您能告诉我如何解决以下安全问题吗 问题是: 非随机CSRF令牌- 建议生成每个用户会话唯一的随机令牌、较大的随机值以及 由加密安全的随机数生成器生成 易受跨站点请求伪造攻击- 建议使用基于令牌的缓解措施;通过在html请求中实现同步器令牌模式 权限升级- 建议在普通用户无法访问受限URL的情况下正确处理会话 会话重播攻击- 建议开发会话处理方法,以确保用户会话在浏览器终止时结束 仅设置不带H

我有codeigniter web应用程序。当我用burp-suite扫描应用程序时,我面临一些安全问题。您能告诉我如何解决以下安全问题吗

问题是:

  • 非随机CSRF令牌-
    建议生成每个用户会话唯一的随机令牌、较大的随机值以及 由加密安全的随机数生成器生成

  • 易受跨站点请求伪造攻击- 建议使用基于令牌的缓解措施;通过在html请求中实现同步器令牌模式

  • 权限升级- 建议在普通用户无法访问受限URL的情况下正确处理会话

  • 会话重播攻击- 建议开发会话处理方法,以确保用户会话在浏览器终止时结束

  • 仅设置不带HTTP标志的Cookie

  • 未启用安全通信。(HTTPS服务器缺少HST)
  • 我的
    login.php

    <script type="text/javascript">
        $(document).ready(function(){ 
            $.ajaxSetup({
                data: {
                    '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
                }
            });
        });
    </script>
        <form>
        <input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />
        <input autocorrect="off" maxlength="50"  autocapitalize="off" autocomplete="off"  name='email' id='email' type='text' />
        <input name='current_url' id='current_url' value="<?php echo $current_url; ?>" type='hidden'/>
        <input name='password' id='password' maxlength="50" type='password' autocorrect="off" autocapitalize="off" autocomplete="off" />
        <input type="submit"  value="Login"   name="btnsubmit" />
          </form>
    
    我需要加密当前的网址,用户名和密码。下面是我从打嗝室得到的信息。
    csrf\u token\u myapp=3d44fd27c845cf3ceb8cb521233c52150&csrf\u token\u myapp=3d44fd27c845cf3ceb8cb521233c52150&email=admin%40test.lk¤t\u url=&password=test1234567&btnsubmit=Login
    预期方法的用途是加密前端表单的值并将其发送到服务器,然后应该使用PHP从服务器端对其进行解密。中间层可以将提交的结果视为加密值

    加密:使用
    CryptoJS
    中的
    AES
    (在浏览器中):

    (函数(){
    var encrypted=CryptoJS.AES.encrypt(“我是黑客”,“我的钥匙”);
    console.log(加密的.toString());
    })();
    
    <代码> <代码>你是在寻找一个从前端加密数据的解决方案,把它发送到服务器并从PHP服务器端解密,这样中间层的数据就不可见了吗?是的,我需要在前端加密表单数据,在服务器端解密。您正在寻找什么合适的加密方法?我尝试了AES加密方法。表单执行GET请求而不是POST。通过这种方式,凭据会泄漏到服务器日志中,在浏览器URL中可见,而csrf的使用是毫无意义的(因为csrf验证只适用于POST请求)。谢谢@Googlian。这段代码帮助我解决了“易受跨站点请求伪造攻击”的问题。
    $config['csrf_protection'] = TRUE;
    $config['csrf_token_name'] = 'csrf_token_myapp';
    $config['csrf_cookie_name'] = 'csrf_cookie_myapp';
    $config['csrf_expire'] = 1200;
    $config['csrf_regenerate'] = TRUE;
    
    $config['cookie_prefix']    = 'myweb_c_';
    $config['cookie_domain']    = '';
    $config['cookie_path']      = '/';
    $config['cookie_secure']    = FALSE;
    $config['cookie_httponly']  = TRUE;
    
    $config['sess_driver'] = 'files';
    $config['sess_cookie_name'] = 'pay_web';
    $config['sess_expiration'] = 900;
    $config['sess_save_path'] = '\\storage\\'
    $config['sess_match_ip'] = TRUE;
    $config['sess_time_to_update'] = 60;
    $config['sess_regenerate_destroy'] = TRUE;
    
    $config['charset'] = 'UTF-8';
    $config['enable_hooks'] = FALSE;
    $config['cache_query_string'] = FALSE;
    $config['encryption_key'] = 'MKNNWNnsanas^@&#(@(*88899';
    $config['composer_autoload'] = FALSE;