PHP中的安全问题和体系结构



我的小程序,基于PHP, MySql, Jquery和Ajax,提供登录和显示数据库中的数据。Login.html -> check-login.php -> success-login.php <-> show-data.php

我的问题:


    有我应该担心或改进的安全问题吗?
  1. 关于$_SESSION,是否有可能有人在远程计算机上的php文件中添加$_SESSION['mytime'],并假装是授权用户?
  2. 我在Youtube上看到一个视频声称80%的登录可以被破坏(通过代理和密码字典),我是否应该设置用户登录的最长时间来防止它或其他建议?
  3. 我可以在MySQL和php(服务器端)或javascript(客户端)上格式化数据,我是否总是在客户端做,或者例如,如果有10个函数,客户端8个,服务器端2个等等。

我的代码如下:

login.html (call check-login.php)

check-login.php

// connect database by PDO
// if username and password (in md5) are matched
session_start();
$_SESSION['mytime'] = time();
header('location:success-login.php');

success-login.php

session_start();
if(!isset($_SESSION['mytime'])) {
  header('location:login.html');
   exit;
}
//use Jquery and Ajax to fetch data from database in show-data.php

show-data.php

session_start();
if(!isset($_SESSION['mytime'])) {
  header('location:login.html');
   exit;
}
//PDO database operation and return data in JSON
  1. 有许多安全问题,如:五个常见的Web应用程序漏洞
  2. 不,这是不可能的,用户设置/改变你的$_SESSION变量由他自己。
  3. 你可以阻止用户选择一个简单的密码,或者你可以放一个验证码,例如五次输入错误的密码。(雅虎!
  4. 我没有得到你要的东西。

在开发这样的应用程序时,您应该记住很多事情。根据从数据库显示的数据的敏感性,您可能希望开始使用HTTPS连接,而不是普通的HTTP。我通常会这样做来提高安全性:

  • 创建加密会话-使用mcrypt并通过cookie在客户端存储解密会话所需的密钥。这样,即使有人最终能够访问会话存储在服务器上的路径,他也无法解码会话,因为密钥存储在客户端。
  • 不要在url中使用任何SQL, 总是检查提交的数据是否有效-即如果记录id存在,输入的数据是否有效等等。
  • 注意跨站点脚本
  • 总是使用密码加密,如果你有敏感数据-尝试加密,以及

关于你的其他问题:

    我不知道你的问题是什么。$_SESSION存储在服务器端。它只能通过在该服务器上运行的脚本或手动(如果您手工编辑$_SESSION文件)来更改
  1. 当用户登录失败X次时使用验证码(reCaptcha)。如果你愿意,你可以添加一个锁-如果用户登录失败5次,用户将被锁定,并将解锁指令的电子邮件发送到用户的电子邮件地址。
  2. 我不知道你所说的format到底是什么意思(是解析,还是样式)。如果我正在响应AJAX请求,我将格式化数据并只输出需要显示的数据。例如,如果我要显示一个用户的信息,我将输出他的usernamefirst_namelast_nameemail,但不输出他的passwordpassword_saltbank_account和任何其他敏感数据。
  3. 作为第3点的后续-当您从服务器端格式化数据时,如何显示它取决于您。您可以通过JavaScript实现,也可以直接将其作为对AJAX请求的响应输出。这取决于你。

你提供给我们的代码是我不会用的,因为它没有检查一个有效的用户。如果用户拥有一个带有mytime变量的会话,则假定用户拥有有效的会话。我会在会话中存储user_idpassword(加密),然后检查这些值是否在数据库中匹配。这样,在用户被删除或更改密码的情况下,他的所有其他会话都将失效。

最新更新