2016-09-28 116 views
2

我道歉,如果这个问题已经被问,如果它只是链接我它在一个评论。

所以我用php一个Android/iOS的应用程序,这样工作创建的Web服务。

  1. 该应用程序发送到http://www.example.com/ws/getCookingData.php请求与2个$_POST PARAMATERS userIDfoodType

  2. php文件然后查询使用这两个变量的数据库,并返回一个结果json_encode

我担心的是,如果有人发现我的网络服务链接他们可以导致调用我的数据库100的那些只是联合国需要

以下POST请求的垃圾邮件是一个例子我目前getData.php文件

<?php 
$userID = mysql_escape_string($_POST['userID']); 
$foodType = mysql_escape_string($_POST['foodType']); 

$mysqli = getDB(); 

echo json_encode(getDate($mysqli, $userID, $foodType); //mysql database interaction is here 

$mysqli->close(); 
?> 

这里没有什么防止黑客试图恶意的SQL语句发布到我的数据库

所以我想知道的是,如果我添加第三个参数到我的发布请求appID这是一个很好的解决方案吗?

例如,如果我是来更新我的getData.php文件下面这会是更安全还是有漏洞,我失踪?

<?php 
$appID = $_POST['appID']; 

if($appID === "hardCodedEquivalentID"){ 
    $userID = mysql_escape_string($_POST['userID']); 
    $foodType = mysql_escape_string($_POST['foodType']); 

    $mysqli = getDB(); 

    echo json_encode(getDate($mysqli, $userID, $foodType); //mysql database interaction is here 

    $mysqli->close(); 
} 

?> 

如果这是一个很好的解决方案,或者已经有一个等效的做法,将实现我想要做的请告诉我

+0

'''''''''''''''''''''''''''''''''''''''''' - 没有SQL注入漏洞就是解决这个问题的答案。我们无法确定,因为我们没有看到您的数据访问代码,但考虑到此代码,我发现您可能有这样的漏洞。 ''如果我向我的发布请求添加了第三个参数,称为appID,这将是一个很好的解决方案吗?“ - 任何使用您的应用程序的人都会看到该值。这不会是一个秘密。 – David

+0

@David关于你的第二点,如何让任何人能够看到appID值? –

+0

@CamConnor:通过监视应用程序和服务之间的流量。除非你在应用程序中加密该流量? – David

回答

-3

使用mysql_real_escape_string()

2 -使用str_replace(" ","",$_POST['userID'])str_replace("%20","",$_POST['userID'])(因为恶意攻击涉及使用%20和空间来注入sql查询)

3-此行添加到页面的顶部,因此该脚本只需要申请,如果其已经从您的网站(这是我在用呢!)

$referrer = $_SERVER['HTTP_REFERER']; 
if (strpos($referrer,"yourwebsite.com")) { 
} else { 
die(); 
} 
+0

所有不好的建议。将特定字符列入黑名单不会防止SQL注入,*不会像代码一样执行用户输入。引用标头很容易被欺骗。 – David

+0

当然不是一个完整的预防,但会过滤很多不好的请求,并帮助OP提高安全性。虽然不需要-1。 –

+0

此建议不能帮助任何人“提高安全性”。此代码提供* false *安全感。它隐藏了开发者的安全问题,而没有将他们从攻击者身上隐藏起来。这是安全性的*相反的*。每种方式都需要-1,因为这是一个不好的答案。 – David

2

要回答你的第一个问题

我担心的是,如果有人发现我的网络服务的链接,他们 可能与导致通话的100对我的 数据库POST请求是只是联合国需要杜绝垃圾邮件,

如果有人想DoS攻击你,那么你不能做在你的代码,以防止它,但你可以尝试使用类似服务的CloudFlare。开始时不值得担心。

关于

这里没有什么防止黑客尝试发布 恶意的SQL语句到我的数据库

然后就上PDO

2

首先读取文档,使用mysqliPDO而不是mysql函数已弃用。其次创建一个函数,用于验证用户并查看用户是否有权访问数据。第三,如果可能的话,尝试LIMIT的数据为100左右。

对appId进行硬编码不是解决方案。为每个特定注册用户创建唯一的ID,然后针对该特定用户匹配appId。当他们的会话过期时,清除访问令牌。在会话开始时,您可以登录并创建新的访问令牌,并可以在整个会话中使用相同的令牌。