Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建了我自己的PHP API_Php_Api - Fatal编程技术网

创建了我自己的PHP API

创建了我自己的PHP API,php,api,Php,Api,你好,StackOverflow社区 目前我在一个小项目中,需要一个API。 我测试了一些soapwsdl和restfulapi,但没有一个对我有效。所以我创建了自己的API。由于我不是专业的编程人员,我想知道我的API是否不安全 <?php class API{ public function __construct(){ if($_SERVER['REQUEST_METHOD'] === 'POST'){ if(!empty($_POST)){

你好,StackOverflow社区

目前我在一个小项目中,需要一个API。 我测试了一些soapwsdl和restfulapi,但没有一个对我有效。所以我创建了自己的API。由于我不是专业的编程人员,我想知道我的API是否不安全

<?php

class API{

public function __construct(){
    if($_SERVER['REQUEST_METHOD'] === 'POST'){
        if(!empty($_POST)){
            $data_array = array();
            require_once('PreparePOST.php');
            foreach($_POST as $key => $value)
                array_push($data_array,array($value => $key));
            echo new PreparePOST($data_array);
        }else{return new Exception('No Data Requested');}
    }else{return new Exception('Request not allowed');}
  }
}$init = new API();

?>
在PreparePOST$data_数组之后,进行了一些认真的验证和安全工作; 例如,仅允许参数和字符转义

注意:这只是GET实现的后期实现,API Auth令牌稍后将可用

你在想什么? 这是胡说八道吗? 哪里可能存在安全问题? 如何改进我的代码? 顺便说一句,我的项目是一个工具,它将客户提供的服务器信息(如高清容量和备份日志)传输到我们的服务器,因此我们对所有服务器进行统计评估

谢谢你的建议 KR

正如您所说,PreparePOST对象执行验证和安全性,最好也共享该代码以识别安全问题

尽管不是安全问题,但有一件事会立即浮现在脑海中,那就是您应该抛出异常,而不是返回异常。此外,当您初始化API对象时,您无法捕获它可能抛出的异常。请参阅我在下面放置的try-catch块

此外,代码不是超级可读的,也许这样更好:

<?php
class API
{
    public function __construct()
    {
        if($_SERVER['REQUEST_METHOD'] === 'POST')
        {
            if(!empty($_POST))
            {
                $data = array();

                require_once('PreparePOST.php');

                foreach($_POST as $key => $value)
                {
                    array_push($data, array($value => $key));
                }

                echo new PreparePOST($data);
            }
            else
            {
                throw new Exception('No Data Requested');
            }
        }
        else
        {
            throw new Exception('Request not allowed');
        }
    }
}

try 
{
    $init = new API();

}
catch(Exception $e)
{
    //handle the exception here
    echo $e->getMessage();
}

?>
具体的编码风格取决于您的偏好,但是为了保持可读性和可维护性,您必须充分利用空白。将代码捆绑在一起绝对没有任何好处。事实恰恰相反


我不会说有必要调用$data变量$data\u数组。您可以从代码中看到它是一个数组,也可以使用逗号和可读性空格分隔函数的参数,。调用array_push时。

好的,首先,去查看,然后阅读所有内容,它应该会给您一些帮助!我投票结束这个问题,因为它要求对代码进行审查,因此过于宽泛/基于观点。它可能会调整为主题。非常感谢!它帮助了我很多。如果你觉得它有帮助,请考虑将答案标记为点击点击在接收到的答案的左边的投票数。