警告:我对服务器安全性几乎一无所知,所以不要假设:)
我们有一个用PHP编写的webapp。其功能的某个部分取决于它与我们的服务器联系和交互。
简单地说,应用程序使用cURL联系我们的服务器,并将大约20个不同的字段发布到我们的页面。这些字段的值来自文本输入和textareas,肯定会有主题中的html和一些javascript,目前我们根本没有对它们进行数据清理,标记剥离等。我们只是简单地获取数据,对其进行解析,然后以稍微不同的格式将其重新显示给用户 - 基本上以略微修改的形式将相同的数据回显到屏幕上。
唯一发生的数据库交互是其中一个字段是其许可证密钥。这将进入准备好的MYSQL语句以验证用户。
我认为我们唯一的漏洞是许可证密钥是正确的,因为它是数据库交互的唯一要点,而且我们应该已经准备好了所准备的声明吗?
我假设我们的服务器在接收用户数据时应该没有安全风险,稍微解析它然后将它回显给它们,因为这不涉及数据库交互。如果这是一个不好的假设,请告诉我为什么以及为了更好地保护我们的系统应采取的步骤。
答案 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攻击的可能性,但这更基于您返回此数据的上下文。它是否也显示在您的网站上?这只是刚刚回到客户手中吗?