当前位置: 首页 > 面试题库 >

CodeIgniter REST API库Ajax PUT抛出403禁止

方夜洛
2023-03-14
问题内容

我让库的其余部分完全正常工作,只是试图生成api键,并通过ajax执行时禁止抛出403。

({"status":false,"error":"Invalid API Key."})

我跟踪到REST_Controller下的_remap函数..好像我不正确地调用url一样?

工作流程: user visits site1.com -> registers for account -> generates api key for their domain -> key recorded in db -> key displayed

他们注册一个帐户后,单击“生成密钥”后,将在site1.com上使用以下表格。

ajax呼叫:

/**
 * Generate an API Key for Us to use
 */

 $("#submitGetApiKey").click(function(){
    $.ajax({
        url: "http://dev.site1.com/api/key",
        crossDomain: true,
        type: "PUT",
        dataType: "jsonp",
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert(errorThrown);
        },
        success: function(data){
            for (var i = keys.length - 1; i >= 0; i--) {
                console.log(keys[i]);
            };
        }
    });
 });

GitHub上的REST-SERVER:https : //github.com/philsturgeon/codeigniter-
restserver

具体看下的key.php application/controllers/api/key.php

与该过程相关的key.php文件的片段:

/**
 * Key Create
 *
 * Insert a key into the database.
 *
 * @access  public
 * @return  void
 */
public function index_put()
{
    // Build a new key
    $key = self::_generate_key();

    // If no key level provided, give them a rubbish one
    $level = $this->put('level') ? $this->put('level') : 1;
    $ignore_limits = $this->put('ignore_limits') ? $this->put('ignore_limits') : 1;

    // Insert the new key
    if (self::_insert_key($key, array('level' => $level, 'ignore_limits' => $ignore_limits)))
    {
        $this->response(array('status' => 1, 'key' => $key), 201); // 201 = Created
    }

    else
    {
        $this->response(array('status' => 0, 'error' => 'Could not save the key.'), 500); // 500 = Internal Server Error
    }
}

响应/请求标头

Request URL:http://dev.mapitusa.com/api/key
Request Method:PUT
Status Code:403 Forbidden
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:0
Cookie:ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e165df34aa4fda5936e940658030f83d%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A118%3A%22Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_7_3%29+AppleWebKit%2F535.19+%28KHTML%2C+like+Gecko%29+Chrome%2F18.0.1025.3+Safari%2F535.19%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1328291821%3B%7Dac0f163b112dbd3769e67f4bb7122db2
Host:dev.mapitusa.com
Origin:http://dev.mapitusa.com
Referer:http://dev.mapitusa.com/api_test.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.3 Safari/535.19
Response Headersview source
Cache-Control:max-age=0, public
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:69
Content-Type:application/json
Date:Fri, 03 Feb 2012 18:03:54 GMT
Expires:Fri, 03 Feb 2012 18:03:54 GMT
Keep-Alive:timeout=5, max=98
Server:Apache
Set-Cookie:ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22f2f466f7b97b89f2a9b557d2d9a0dbcc%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A118%3A%22Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_7_3%29+AppleWebKit%2F535.19+%28KHTML%2C+like+Gecko%29+Chrome%2F18.0.1025.3+Safari%2F535.19%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1328292234%3B%7D6821b96c7e58b55f1767eb265ffdb79e; expires=Fri, 03-Feb-2012 20:03:54 GMT; path=/
Status:403
Vary:Accept-Encoding,User-Agent
X-Powered-By:PHP/5.3.6
X-UA-Compatible:IE=Edge,chrome=1

问题答案:

我最终发现403禁止是因为我没有提供api密钥来生成密钥。

有点矛盾,因为Phil的文档没有说明必须先使用现有的api密钥,然后才能生成密钥。

我只是在数据库的表中创建了一个伪造的密钥,并在调用/ key / index?X-API-KEY = boguskey时引用了该伪造密钥



 类似资料:
  • 因此,我计划在我的网站中实现CSRF,并设置所需的内容,我认为我设置正确,但仍然存在ajax提交表单的问题。 这就是我在配置中的内容,在配置中我设置了以防止每次提交时的重新生成(基于此讨论Ajax CSRF 403禁止的codeigniter)。 而我的表单,我没有使用html表单标记,而是使用和。 Ajax提交表单: PHP函数 如果我将ajax类型更改为,它可以工作,但不能工作。如果从控制台查

  • 我试图从https://www.ecfr.gov/cgi-bin/ecfr?page=browse使用python中的请求模块获取数据 我还要求使用用户代理和头信息中的所有参数(我在开发人员工具中看到)。 我已经尝试使用免费代理/旋转用户头/cookie和我能得到的一切。但不知何故,网站能够知道我没有使用标题。 在html回应中--我看到那个网站要求完成验证码。 我能跳过吗?

  • 最近,我一直试图在CentOS服务器上使用< code>mod_wsgi部署django站点,但到目前为止,当我试图通过我的笔记本电脑访问Django站点时,网页只显示< code >错误:403禁止您没有权限在此服务器上访问/ 除了阅读所有显而易见的文档之外,我还研究了前面的这些问题: Django mod_wsgi Apache = 403 禁止 错误消息“禁止您无权访问 / 在此服务器上”

  • 问题内容: 我有以下代码: 但是,它引发此错误: 谁能告诉我为什么会这样吗? 问题答案: 我相信这是因为相对的路径。“ ../”被认为是恶意的。首先解析本地路径,然后调用。您可以事先解析路径。

  • 我有这个代码: 但是,它会抛出以下错误: 有人能告诉我为什么会这样吗?

  • 问题内容: 我试图通过从slide_images文件夹中获取所有图像名称并将其附加到来动态地动态显示滑块图像。 问题答案: 最后,我通过使用json解决了这个问题。 首先,我创建getimages.php文件并读取该文件中的目录,并获取所有图像名称并将该名称存储在数组中。 getimages.php 从要动态加载图像的页面调用getimages.php。 index.php 这对我来说是完美的。