我的小程序,基于PHP, MySql, Jquery和Ajax,提供登录和显示数据库中的数据。Login.html -> check-login.php -> success-login.php <-> show-data.php
我的问题:
- 关于
$_SESSION
,是否有可能有人在远程计算机上的php文件中添加$_SESSION['mytime']
,并假装是授权用户? - 我在Youtube上看到一个视频声称80%的登录可以被破坏(通过代理和密码字典),我是否应该设置用户登录的最长时间来防止它或其他建议?
- 我可以在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
- 有许多安全问题,如:五个常见的Web应用程序漏洞
- 不,这是不可能的,用户设置/改变你的
$_SESSION
变量由他自己。 - 你可以阻止用户选择一个简单的密码,或者你可以放一个验证码,例如五次输入错误的密码。(雅虎!
- 我没有得到你要的东西。
在开发这样的应用程序时,您应该记住很多事情。根据从数据库显示的数据的敏感性,您可能希望开始使用HTTPS连接,而不是普通的HTTP。我通常会这样做来提高安全性:
- 创建加密会话-使用mcrypt并通过cookie在客户端存储解密会话所需的密钥。这样,即使有人最终能够访问会话存储在服务器上的路径,他也无法解码会话,因为密钥存储在客户端。
- 不要在url中使用任何SQL, 总是检查提交的数据是否有效-即如果记录id存在,输入的数据是否有效等等。
- 注意跨站点脚本
- 总是使用密码加密,如果你有敏感数据-尝试加密,以及
关于你的其他问题:
- 我不知道你的问题是什么。
- 当用户登录失败X次时使用验证码(reCaptcha)。如果你愿意,你可以添加一个锁-如果用户登录失败5次,用户将被锁定,并将解锁指令的电子邮件发送到用户的电子邮件地址。
- 我不知道你所说的
format
到底是什么意思(是解析,还是样式)。如果我正在响应AJAX请求,我将格式化数据并只输出需要显示的数据。例如,如果我要显示一个用户的信息,我将输出他的username
、first_name
、last_name
、email
,但不输出他的password
、password_salt
、bank_account
和任何其他敏感数据。 - 作为第3点的后续-当您从服务器端格式化数据时,如何显示它取决于您。您可以通过JavaScript实现,也可以直接将其作为对AJAX请求的响应输出。这取决于你。
$_SESSION
存储在服务器端。它只能通过在该服务器上运行的脚本或手动(如果您手工编辑$_SESSION
文件)来更改你提供给我们的代码是我不会用的,因为它没有检查一个有效的用户。如果用户拥有一个带有mytime
变量的会话,则假定用户拥有有效的会话。我会在会话中存储user_id
和password
(加密),然后检查这些值是否在数据库中匹配。这样,在用户被删除或更改密码的情况下,他的所有其他会话都将失效。