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
答案 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时)。