3

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

我的问题:

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

我的代码如下:

login.html(调用 check-login.php)

检查登录.php

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

成功登录.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

显示数据.php

session_start();
if(!isset($_SESSION['mytime'])) {
  header('location:login.html');
   exit;
}
//PDO database operation and return data in JSON
4

2 回答 2

0

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

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

关于你的其他问题:

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

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

于 2013-05-17T00:32:00.747 回答
0
  1. 有许多安全问题,例如:五个常见的 Web 应用程序漏洞
  2. 不,用户不可能自己设置/更改您的$_SESSION变量。
  3. 您可以防止用户选择一个简单的密码,或者您可以放置​​一个验证,例如五次错误密码输入后。(雅虎!做到了)等等......
  4. 我没有得到你正在寻找的东西。
于 2013-01-04T14:34:17.997 回答