【问题标题】:Codiginter prevent direct access to method used by form actionCodiginter 阻止直接访问表单操作使用的方法
【发布时间】:2015-10-31 13:20:44
【问题描述】:

我对 codeigniter 框架还很陌生,遇到了一个我不确定如何正确解决的问题。

我的大多数应用程序都需要身份验证,但我有一个用于表单的公共非身份验证控制器。但是表单的 uri 是使用单一使用令牌编码的。所以表单只能访问一次。

我的表单操作的代码...

<?php 
    echo form_open('my_form/submit_form' . $id , 'id=”theForm”');
            …

我想阻止某人访问/访问http://my-site.com/my_form/submit_form/someID,而是抛出一条消息。以下是我现在的工作方式,但我不确定它是否安全。我正在使用 codeigniter 的 csrf 保护,因此每个 $_POST 都使用 csrf_token 提交。

class My_Form extends MX_Controller
{
    …

    public function submit_form($id){
        // my attempt to prevent direct access
        if (!isset($_POST["input_id"])) {
            exit('Sorry this page is inaccessible.');
        }

}

所以基本上如果表单上隐藏输入字段的值没有设置,那么脚本就会退出。这是一种安全的处理方式吗?

【问题讨论】:

  • 注意在此处使用数组form_open('my_form/submit_form' . $id, array('id' =&gt; 'theForm')); 您可能需要配置您的 routes.php 文件中的 id 以确保它可以匹配 id 其他明智使用用户指南中的 uri segment()
  • 阅读本教程w3code.in/2015/10/…
  • @ Ricky -- 这如何解决我的问题。我的表单或提交表单没有任何问题,我只想让它更安全。
  • 完全没问题。您可以使用 CodeIgniter 方式为$this-&gt;input-&gt;post() OR exit('Not your cup of tea, buddy.');

标签: php forms codeigniter


【解决方案1】:

试试这个,

public function submit_form($id){
    // my attempt to prevent direct access
    if (!$this->input->post(null, false)) {
        exit('Sorry this page is inaccessible.');
    } else {
        //your code
    }

}

【讨论】:

  • 这看起来更像“codeigniter-esc”谢谢。所以我接受答案。
猜你喜欢
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多