簡體   English   中英

創建了我自己的PHP API

[英]Created my own PHP API

您好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 Auth Token。

  • 你在想什么?
  • 這是胡說八道嗎?
  • 哪里可能存在安全問題?
  • 如何改善我的代碼?

順便說一句。 我的項目是一個工具,可以將客戶的服務器信息(例如HD容量和備份日志)傳輸到我們的服務器,因此我們可以對所有服務器進行統計評估。

謝謝你的建議
KR

正如您所說的, PreparePOST對象可以進行驗證和安全性,也最好共享該代碼以識別安全性問題。

盡管不是安全問題,但馬上想到的一件事是,您應該throw Exception而不是return Exception 同樣,在初始化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時)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM