[英]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.