创建了我自己的PHP API

时间:2017-03-23 08:54:03

标签: php api

Hello StackOverflow社区

目前我在小型项目中,需要API。 我测试了一些SOAP WSDL和restFul API,但没有一个对我有用。所以我创建了自己的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_array)之后完成了一些严肃的验证和安全工作;
例如。只允许参数和字符转义。

  

注意:这只是POST实现的GET实现,API验证令牌将在以后可用。

  • 你在想什么?
  • 这是否是胡说八道?
  • 哪些可能存在安全问题?
  • 我如何改进我的代码?

顺便说一下。我的项目是一个工具,它将我们客户的服务器信息(如HD容量和备份日志)传输到我们的服务器,因此我们统计评估所有服务器。

谢谢你的建议 KR

1 个答案:

答案 0 :(得分:-1)

正如您所说PreparePOST对象执行验证和安全性,分享该代码也是理想的安全问题。

虽然不是安全问题,但我们应该立即想到一件事:throw Exception而不是return。此外,当您初始化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_array。您可以从代码中看到它是一个数组,也可以使用逗号分隔函数的参数和可读性空间,。 (调用array_push时)。