codeigniter CSRF 错误:“不允许您请求的操作." [英] codeigniter CSRF error: "The action you have requested is not allowed."
问题描述
我在 codeigniter 的配置文件中启用了 csrf_protection 选项,并使用 form_open() 函数来创建我的表单.但是当我提交表单时,出现这个错误:
<块引用>您请求的操作不被允许.
我已经完成了类似这个主题的答案(与我的问题最相关):问题
但他们没有工作,问题仍然存在.
我的 config.php:
<?php if (!defined('BASEPATH')) exit('不允许直接脚本访问');/*|--------------------------------------------------------------------------|基本站点 URL|--------------------------------------------------------------------------||您的 CodeIgniter 根的 URL.通常这将是您的基本 URL,|带有斜杠:||http://example.com/||如果未设置,则 CodeIgniter 将猜测协议、域和|您的安装路径.|*/$config['base_url'] = '';/*|--------------------------------------------------------------------------|索引文件|--------------------------------------------------------------------------||通常这将是您的 index.php 文件,除非您已将其重命名为|别的东西.如果您使用 mod_rewrite 删除页面,请设置此|变量,所以它是空白的.|*/$config['index_page'] = 'index.php';/*|--------------------------------------------------------------------------|URI协议|--------------------------------------------------------------------------||此项确定应该使用哪个服务器全局来检索|URI 字符串.AUTO"的默认设置适用于大多数服务器.|如果您的链接似乎不起作用,请尝试其他美味之一:||'AUTO' 默认 - 自动检测|'PATH_INFO' 使用 PATH_INFO|'QUERY_STRING' 使用 QUERY_STRING|'REQUEST_URI' 使用 REQUEST_URI|'ORIG_PATH_INFO' 使用 ORIG_PATH_INFO|*/$config['uri_protocol'] = 'AUTO';/*|--------------------------------------------------------------------------|网址后缀|--------------------------------------------------------------------------||此选项允许您为 CodeIgniter 生成的所有 URL 添加后缀.|有关更多信息,请参阅用户指南:||http://codeigniter.com/user_guide/general/urls.html*/$config['url_suffix'] = '';/*|--------------------------------------------------------------------------|默认语言|--------------------------------------------------------------------------||这决定了应该使用哪组语言文件.确保|如果您打算使用其他内容,则有可用的翻译|比英语.|*/$config['language'] = '波斯语';/*|--------------------------------------------------------------------------|默认字符集|--------------------------------------------------------------------------||这决定了在各种方法中默认使用的字符集|需要提供字符集.|*/$config['charset'] = 'UTF-8';/*|--------------------------------------------------------------------------|启用/禁用系统挂钩|--------------------------------------------------------------------------||如果您想使用钩子"功能,您必须通过以下方式启用它|将此变量设置为 TRUE(布尔值).有关详细信息,请参阅用户指南.|*/$config['enable_hooks'] = FALSE;/*|--------------------------------------------------------------------------|类扩展前缀|--------------------------------------------------------------------------||此项允许您在扩展时设置文件名/类名前缀|本地库.有关更多信息,请参阅用户指南:||http://codeigniter.com/user_guide/general/core_classes.html|http://codeigniter.com/user_guide/general/creating_libraries.html|*/$config['subclass_prefix'] = 'MY_';/*|--------------------------------------------------------------------------|允许的 URL 字符|--------------------------------------------------------------------------||这使您可以使用正则表达式指定允许使用哪些字符|在您的网址中.当有人尝试提交不允许的 URL 时|字符,他们将收到警告消息.||作为一项安全措施,强烈建议您将 URL 限制为|尽可能少的字符.默认情况下只允许这些:a-z 0-9~%.:_-||留空以允许所有字符——但前提是你疯了.||除非您完全了解后果,否则请勿更改此内容!!|*/$config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';/*|--------------------------------------------------------------------------|启用查询字符串|--------------------------------------------------------------------------||默认情况下,CodeIgniter 使用对搜索引擎友好的基于段的 URL:|example.com/who/what/where/||默认情况下,CodeIgniter 允许访问 $_GET 数组.如果对于某些|如果您想禁用它,请将allow_get_array"设置为 FALSE.||您可以选择启用基于标准查询字符串的 URL:|example.com?who=me&what=something&where=here||选项是:TRUE 或 FALSE(布尔值)||其他项目可让您设置查询字符串words"|调用您的控制器及其功能:|example.com/index.php?c=controller&m=function||请注意,某些助手在以下情况下无法按预期工作|此功能已启用,因为 CodeIgniter 主要设计用于|使用基于段的 URL.|*/$config['allow_get_array'] = TRUE;$config['enable_query_strings'] = FALSE;$config['controller_trigger'] = 'c';$config['function_trigger'] = 'm';$config['directory_trigger'] = 'd';//实验当前未使用/*|--------------------------------------------------------------------------|错误记录阈值|--------------------------------------------------------------------------||如果您已启用错误日志记录,则可以将错误阈值设置为|确定记录的内容.阈值选项是:|您可以通过将阈值设置为零来启用错误日志记录.这|阈值确定记录的内容.阈值选项是:||0 = 禁用记录,错误记录关闭|1 = 错误消息(包括 PHP 错误)|2 = 调试消息|3 = 信息性消息|4 = 所有消息||对于实时站点,您通常只会启用要记录的错误 (1) 否则|您的日志文件会很快填满.|*/$config['log_threshold'] = 0;/*|--------------------------------------------------------------------------|错误记录目录路径|--------------------------------------------------------------------------||除非您想设置默认值以外的其他内容,否则请保留此空白|应用程序/日志/文件夹.使用带有尾部斜杠的完整服务器路径.|*/$config['log_path'] = '';/*|--------------------------------------------------------------------------|日志的日期格式|--------------------------------------------------------------------------||记录的每个项目都有一个关联的日期.您可以使用 PHP 日期|设置您自己的日期格式的代码|*/$config['log_date_format'] = 'Y-m-d H:i:s';/*|--------------------------------------------------------------------------|缓存目录路径|--------------------------------------------------------------------------||除非您想设置默认值以外的其他内容,否则请保留此空白|系统/缓存/文件夹.使用带有尾部斜杠的完整服务器路径.|*/$config['cache_path'] = '';/*|--------------------------------------------------------------------------|加密密钥|--------------------------------------------------------------------------||如果您使用 Encryption 类或 Session 类,您|必须设置加密密钥.有关信息,请参阅用户指南.|*/$config['encryption_key'] = 'b{{h#/Ib;pd<%+H0?ujvv9KLRc0LR-o8ot"K*so.J&}4qCQ+Ij81ihd48fx5_';/*|--------------------------------------------------------------------------|会话变量|--------------------------------------------------------------------------||'sess_cookie_name' = 您想要的 cookie 名称|'sess_expiration' = 您希望会话持续的秒数.|默认会话持续 7200 秒(两小时).设置为零表示没有过期.|'sess_expire_on_close' = 是否使会话自动过期|当浏览器窗口关闭时|'sess_encrypt_cookie' = 是否加密cookie|'sess_use_database' = 是否将会话数据保存到数据库|'sess_table_name' = 会话数据库表的名称|'sess_match_ip' = 读取会话数据时是否匹配用户的IP地址|'sess_match_useragent' = 读取会话数据时是否匹配用户代理|'sess_time_to_update' = CI 刷新会话信息之间的秒数|*/$config['sess_cookie_name'] = 'ins_mngm_system';$config['sess_expiration'] = 7200;$config['sess_expire_on_close'] = TRUE;$config['sess_encrypt_cookie'] = TRUE;$config['sess_use_database'] = TRUE;$config['sess_table_name'] = 'user_sessions';$config['sess_match_ip'] = TRUE;$config['sess_match_useragent'] = TRUE;$config['sess_time_to_update'] = 300;/*|--------------------------------------------------------------------------|Cookie 相关变量|--------------------------------------------------------------------------||'cookie_prefix' = 如果需要避免冲突,请设置前缀|'cookie_domain' = 设置为 .your-domain.com 以获取站点范围的 cookie|'cookie_path' = 通常是一个正斜杠|'cookie_secure' = 仅当存在安全的 HTTPS 连接时才会设置 Cookie.|*/$config['cookie_prefix'] = "";$config['cookie_domain'] = "";$config['cookie_path'] = "/";$config['cookie_secure'] = TRUE;/*|--------------------------------------------------------------------------|全局 XSS 过滤|--------------------------------------------------------------------------||确定 XSS 过滤器在 GET、POST 或|遇到COOKIE数据|*/$config['global_xss_filtering'] = TRUE;/*|--------------------------------------------------------------------------|跨站请求伪造|--------------------------------------------------------------------------|启用要设置的 CSRF cookie 令牌.当设置为 TRUE 时,令牌将是|检查提交的表格.如果您正在接受用户数据,则强烈|建议启用 CSRF 保护.||'csrf_token_name' = 令牌名称|'csrf_cookie_name' = cookie 名称|'csrf_expire' = 令牌应到期的秒数.*/$config['csrf_protection'] = TRUE;$config['csrf_token_name'] = 'relt';$config['csrf_cookie_name'] = 'csrf_cookie_name';$config['csrf_expire'] = 7200;/*|--------------------------------------------------------------------------|输出压缩|--------------------------------------------------------------------------||启用 Gzip 输出压缩以加快页面加载速度.启用时,|输出类将测试您的服务器是否支持 Gzip.|但是,即使支持,也并非所有浏览器都支持压缩|因此,只有在您合理地确定您的访问者可以处理它时才启用它.||非常重要:如果启用压缩时出现空白页|意味着您过早地向浏览器输出某些内容.它可以|甚至在你的一个脚本的末尾是一行空格.为了|压缩工作,在调用输出缓冲区之前什么都不能发送|通过输出类.不要在启用压缩的情况下回显"任何值.|*/$config['compress_output'] = FALSE;/*|--------------------------------------------------------------------------|主时间参考|--------------------------------------------------------------------------||选项是本地"或gmt".这个首选项告诉系统是否使用|您服务器的本地时间作为主现在"参考,或将其转换为|格林威治标准时间.有关信息,请参阅用户指南的日期助手"页面|关于日期处理.|*/$config['time_reference'] = 'local';/*|--------------------------------------------------------------------------|重写 PHP 短标签|--------------------------------------------------------------------------||如果您的 PHP 安装没有启用短标签支持 CI|可以即时重写标签,使您能够利用该语法|在您的视图文件中.选项为 TRUE 或 FALSE(布尔值)|*/$config['rewrite_short_tags'] = FALSE;/*|--------------------------------------------------------------------------|反向代理 IP|--------------------------------------------------------------------------||如果您的服务器位于反向代理之后,则必须将代理 IP 列入白名单|CodeIgniter 应该信任 HTTP_X_FORWARDED_FOR 的地址|标头,以便正确识别访问者的 IP 地址.|逗号分隔,例如'10.0.1.200,10.0.1.201'|*/$config['proxy_ips'] = '';/* 文件 config.php 结束 *//* 位置:./application/config/config.php */
控制器(main.php):
<?php if (!defined('BASEPATH')) exit('不允许直接脚本访问');类 Main 扩展 CI_Controller {//公共函数__construct()//{//$this->load->controller('access_controll');//}公共函数索引(){重定向('身份验证/登录');}公共函数登录(){}公共函数注册(){$this->load->view('register');}公共函数忘记(){}}/* 文件 main.php 结束 *//* 位置:./application/controllers/main.php */
查看(login.php):
<html lang="zh-cn"><头><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content=""><meta name="author" content=""><link rel="shortcut icon" href="<?php echo base_url();?>template/img/favicon.png"><title>ورود به حساب کاربری</title><!-- Bootstrap 核心 CSS --><link href="<?php echo base_url();?>template/css/bootstrap.rtl.css" rel="stylesheet"><!-- 此模板的自定义样式--><link href="<?php echo base_url();?>template/style.css" rel="stylesheet"><!-- HTML5 shim 和 Respond.js IE8 支持 HTML5 元素和媒体查询 --><!--[如果是 IE 9]><script src="js/html5shiv.js"></script><script src="js/respond.min.js"></script><![endif]-->头部><body id="登录"><div class="登录内容"><div class="widget-content"><h1>سامانه مدیریت مشتریان</h1><div class="alert alert-danger"><?php echo $message;?></div><?php echo form_open('auth/login', array('role'=>'form'));?><div class="form-group"><label for="identity">شناسه کاربری:</label><div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span><?php echo form_input(array('name'=>'identity', 'type'=>'text', 'placeholder'=>'نام کاربری یا ایمیل', 'class'=>'form-控制', 'id'='=>'身份'));?>
<div class="form-group"><label for="pass">گذرواژه:</label><div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span><?php echo form_input(array('name'=>'pass', 'type'=>'password', 'placeholder'=>'گذرواژه', 'class'=>'form-control'));?>