在LAN服务器上保护PHP网站 - 正在保护SESSION,准备好的语句和HTTPS吗?

时间:2012-10-31 13:45:36

标签: php session https mysqli

我正在开发一个只能从局域网访问的网站。我仍然希望尽可能安全。

从Web的角度来看,是否足以将SESSION检查添加到每个PHP文件,使用准备好的mysqli语句并使用HTTPS?

我将更具体:

我正在检查每个PHP页面:

if(!isset($_SESSION['login']) || $_SESSION['UA'] != $_SERVER['HTTP_USER_AGENT'] || $_SESSION['IP'] != $_SERVER['REMOTE_ADDR'] || time() - $_SESSION['timeout']>=600){
session_unset();
session_destroy();
header('Location:index.php');

我还会在每个页面上重新生成会话ID,这是肯定的。所以我正在检查用户的用户代理,IP地址,活动超时和会话变量“login”。

对于mysql连接我主要使用预处理语句(mysqli)来保证安全性和性能,如果我不使用或不能使用预处理语句,我在处理客户端数据时总是使用real_escape_string()。

我还将仅允许使用HTTPS,并选中$_SERVER['HTTPS'] = "on"

服务器永远不会设置任何cookie,PHPSSID除外。

我能做的就是让我的网站安全,还是还有别的吗?我在网上发现了如何保护网站的点点滴滴,但在一个地方什么都没有,所以这就是我在这里问的原因。

4 个答案:

答案 0 :(得分:1)

此问题的更好网站可能是https://security.stackexchange.com/

虽然您的LAN网络服务器更安全知道它不是防弹的。您的客户端计算机可能是局域网环境中不安全的主要传播因素之一,特别是如果他们也可以访问并暴露于外部Internet。让它们对network eavesdroppingMan-in-the-middle攻击等开放。

这是A Guide to Building Secure Web Applications and Web Services

答案 1 :(得分:0)

在您的网络服务器配置中,您可以阻止所有来自LAN的请求,这只是一种额外的预防措施。

除此之外,似乎绰绰有余。

答案 2 :(得分:0)

确保您验证用户所做的大量数据,以确保其有效或用户应该给您的数据,以及是否必须重新显示他们提供给您的数据或其他人给您的数据(即您存储的数据)它在db中供以后使用)然后确保你使用htmlenties来实现它,这样JavaScript就无法在数据中运行。如果你把他们的数据放在javascript中,那么使用addslashes。你说的很多东西也很好。

作为随机附注我会验证他们给你的会话ID是一个有效的会话ID,即^ [a-zA-Z0-9] {26,40} $

答案 3 :(得分:0)

你应该减少攻击面。

看起来你有PHP文件处于打开状态以便被请求。对于该文件,您知道这就是您在顶部编写代码块以“保护”它们的情况。

而是将所有这些移动到私人目录中,并且在webroot中只有一个入口点,例如index.php。由于这是唯一的一点,您可以验证是否应该在中心位置允许请求。这意味着你不能忘记一个要保护的文件,如果你想添加额外的支票,你可以在一个地方改善这种情况。

使用PHP文件(Apache HTTPD)配置示例:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

在PHP脚本中,您可以通过使用$_SERVER['REQUEST_URI'] and $_SERVER['QUERY_STRING']等特殊变量来获取URI / URL。