许可应用程序的服务器安

时间:2010-11-03 03:02:07

标签: php mysql security curl

警告:我对服务器安全性几乎一无所知,所以不要假设:)

我们有一个用PHP编写的webapp。其功能的某个部分取决于它与我们的服务器联系和交互。

简单地说,应用程序使用cURL联系我们的服务器,并将大约20个不同的字段发布到我们的页面。这些字段的值来自文本输入和textareas,肯定会有主题中的html和一些javascript,目前我们根本没有对它们进行数据清理,标记剥离等。我们只是简单地获取数据,对其进行解析,然后以稍微不同的格式将其重新显示给用户 - 基本上以略微修改的形式将相同的数据回显到屏幕上。

唯一发生的数据库交互是其中一个字段是其许可证密钥。这将进入准备好的MYSQL语句以验证用户。

我认为我们唯一的漏洞是许可证密钥是正确的,因为它是数据库交互的唯一要点,而且我们应该已经准备好了所准备的声明吗?

我假设我们的服务器在接收用户数据时应该没有安全风险,稍微解析它然后将它回显给它们,因为这不涉及数据库交互。如果这是一个不好的假设,请告诉我为什么以及为了更好地保护我们的系统应采取的步骤。

1 个答案:

答案 0 :(得分:3)

最大的安全问题来自数据库交互(SQL-Injection),因此您可能希望通过正则表达式将许可证列入白名单......

if(preg_match('/^[a-z0-9]$/', $license)) {
   // Ok to proceed with database interaction...
} else {
   die('NO USAGE FOR YOU!');
}

检查您是否使用了eval()或``(< =那些是后退滴答)与传入值。

确保在使用之前定义所有变量。以下是不该做的事情的例子......

if($_POST['password'] == $password) {
    $is_authenticated = true;
}

if($is_authenticated) {
    // ... code ...
}

您可能认为...代码运行的唯一方法是访问此脚本的人发布正确的密码。实际上,如果在服务器上启用了register_globals,他们可以简单地将一个get key =>值.php?is_authenticated=1传递给请求脚本。

这是使用变量的正确(预定义变量)方式。

$is_authenticated = false;
if($_POST['password'] == $password) {
    $is_authenticated = true;
}

if($is_authenticated) {
    // ... code ...
}

您还需要研究XSS攻击的可能性,但这更基于您返回此数据的上下文。它是否也显示在您的网站上?这只是刚刚回到客户手中吗?

相关问题