我正在开发一个只能从局域网访问的网站。我仍然希望尽可能安全。
从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除外。
我能做的就是让我的网站安全,还是还有别的吗?我在网上发现了如何保护网站的点点滴滴,但在一个地方什么都没有,所以这就是我在这里问的原因。
答案 0 :(得分:1)
此问题的更好网站可能是https://security.stackexchange.com/
虽然您的LAN网络服务器更安全知道它不是防弹的。您的客户端计算机可能是局域网环境中不安全的主要传播因素之一,特别是如果他们也可以访问并暴露于外部Internet。让它们对network eavesdropping或Man-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。