使用Php和Mysql保护Web应用程序的用户会话和数据

时间:2015-07-18 10:25:53

标签: php mysql security session

我需要使用PHP和Mysql创建一个非常强大且安全的会话。我正在阅读以下指南:custom Django action;它安全可靠吗?请发布确保会话安全的最佳方法。

目前,根据上述指南,这个小脚本授予了安全性,但我知道不太安全,请帮助我改进它:

function sec_session_start() {
  $session_name = "";
  $secure = true; // Imposta il parametro a true se vuoi usare il protocollo 'https'.
  $httponly = true; // Questo impedirà ad un javascript di essere in grado di accedere all'id di sessione.
  ini_set('session.use_only_cookies', 1); // Forza la sessione ad utilizzare solo i cookie.
  $cookieParams["lifetime"] = 1440;
  $cookieParams = session_get_cookie_params(); // Legge i parametri correnti relativi ai cookie.
  session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
  session_name($session_name); // Imposta il nome di sessione con quello prescelto all'inizio della funzione.
  session_start(); // Avvia la sessione php.
  session_regenerate_id(true); // Rigenera la sessione e cancella quella creata in precedenza.
}

我的服务器现在是一个简单的Ubuntu机器,我只安装了几个程序,如apache,php5,mysql,phpmyadmin和webmin。目前通过ssh进行主动访问,我认为这可能会产生安全问题,但目前,该项目尚未启动,因此没有这些类型的问题。我将PDO用于所有SQL脚本。

最重要的是,我需要有关PHP中如何提高会话安全性的信息,因为在我看来,目前这些风险最大。我还尝试针对SQL注入,暴力攻击和DDos优化脚本。

1 个答案:

答案 0 :(得分:4)

构建一个安全的Web客户端 - 服务器应用程序包含许多移动部件,并且很大程度上取决于部署:家庭中的单个机器与托管片段与托管VM与物理共址集群...以及您的整体架构应用

根据您参考的指南("如何在PHP和MySQL中创建安全会话管理系统")以及您最关心会话安全性的事实,我将重点关注回答这方面的安全问题。

请注意,您引用的指南特别针对使用加密在数据库中安全存储会话信息的功能。如果有人侵入您的服务器并且可以访问您的计算机并且能够读取您的数据库,该指南将保护您的用户会话数据。

您明确引用的指南并未解决通过https建立安全连接的问题,https单独包含许多移动部件,从配置服务器的方式到允许客户端连接的SSL / TLS版本。请务必仅允许更新,更安全的变体。这可能包含在许多其他SO帖子和互联网指南中。 The definitive guide to form-based website authentication看起来是一个好的开始。

您正在使用的指南似乎是一个不错的开端,可以确保存储在您数据库中的敏感会话数据在黑客"拥有" (具有完全访问权限)到您的服务器。我确信,正如任何安全问题一样,指南中有一些要批评的部分,因为没有什么是完全万无一失的。

安全性的一个良好开端就是让黑客攻击变得非常重要;如果您是高价值目标,例如存储信用卡号码的银行或商家,甚至可能用于财务欺诈的社会安全号码和个人信息,您还需要做更多的事情。

要评估服务器上SSL配置和软件的安全性,请在以下SSL Labs Website Verification Site输入您的域名,并使用详细的成绩单接收和A +到F级别。

您一直在阅读的指南没有什么可以降低SQL注入的风险,最好通过在发送到数据库之前清理任何用户输入来完成,以及编写非常好的PHP和JavaScript以防止任何可利用的错误。当然,暴力和DoS是未解决的其他主题。

我说phpmyadmin和webmin的密码对于保护非常重要,因为对您的计算机的任何管理员级密码访问都是一个漏洞。使用强大的,不可猜测的密码,避免从未知或公共wifi热点访问服务器。如果您希望ssh到您的计算机进行配置,请考虑采取措施,例如禁止基于密码的身份验证(转而使用基于密钥的身份验证)。在备用端口上运行ssh守护程序可以阻止许多"脚本小子"风格的黑客以及大量的僵尸网络。

在这篇名为The Six Dumbest Ideas in Computer Security的社论中给出了一些要避免的安全策略。它有点过时(2005年),但给出了一些关于安全哲学的有用(但有见解)的大图想法。

最后,阅读所有可以从信誉良好的来源获取的内容,将它们全部带到一边,并形成您自己的(知情的)意见!

祝你的项目好运!