Php Ajax登录系统的安全性
我已经制作了一个登录系统,它使用了一个基本的ajax请求和一些反馈,并且运行良好(代码在底部) 除了我将要输入的哈希和盐析密码(因此不要挂断),使用Ajax/jQuery处理这些请求的安全含义是什么:最重要的是:Php Ajax登录系统的安全性,php,javascript,jquery,mysql,ajax,Php,Javascript,Jquery,Mysql,Ajax,我已经制作了一个登录系统,它使用了一个基本的ajax请求和一些反馈,并且运行良好(代码在底部) 除了我将要输入的哈希和盐析密码(因此不要挂断),使用Ajax/jQuery处理这些请求的安全含义是什么:最重要的是: 与纯PHP相比,依赖JS是一种什么样的普遍看法?人们是否会进行冗余,简单地说这是一个只依赖JS的网站是否合法(大量网站基于Twitter引导,因此它有点依赖JS) 我的PHP和JS接口是否正确?(我的饼干还能用吗?) 如何创建一种安全的方法,以便在成功登录时使用jQuery.load(
$(function login() {
$("form .button").click(function () {
// getting form values and assigning variable names
var username = $("form #username").val();
var password = $("form #password").val();
var remember = $("form #remember").val();
// concatenating variables to form the data used by the Ajax post method
var dataString = 'username=' + username + '&password=' + password + '&remember=' + remember;
// begin Ajax post function
$.ajax({
type: "POST",
url: "controls/login/process.php",
data: dataString,
success: function (response) {
if (response == 'success') {
alert("SUCCESS");
} else {
$('.alert').find('span').text('Incorrect username or password');
$('.alert').addClass('alert-error').fadeIn('fast');
}
},
error: function () {
$('.alert').find('span').text('An error occured, try again');
$('.alert').addClass('alert-error').fadeIn('fast');
}
});
return false;
});
});
<?php
session_start();
// Starting the session
require '../../tools/db/connect.php';
// Including the database connection file
session_set_cookie_params(2*7*24*60*60);
// Making the cookie live for 2 weeks
if($_SESSION['reference'] && !isset($_COOKIE['unifyLogin']) && !$_SESSION['remember']){
// If you are logged in, but you don't have the cookie and you have not checked the remember checkbox (a browser restart), destroy the session
$_SESSION = array();
session_destroy();
echo "expired";
}
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
$_POST['remember'] = (int)$_POST['remember'];
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT ID,REFERENCE FROM USER WHERE USERNAME='{$_POST['username']}' AND PASSWORD='{$_POST['password']}'"));
if($row['REFERENCE']) {
$_SESSION['secure'] = false;
// If everything is OK login
$_SESSION['id'] = $row['ID'];
$_SESSION['reference'] = $row['REFERENCE'];
$_SESSION['remember'] = $_POST['remember'];
// Store some data in the session
setcookie('unifyLogin',$_POST['remember']);
// We create the cookie
echo "success";
} else {
echo "failure";
}
?>
确保网站安全的最佳方法是使用SHA-512加密密码
$rounds = 5000
$cryptedPwd = crypt($password, '$6$rounds=' . $rounds . '$SOMeSILLySTrInG$');
要解密:
$pwdEntered = trim($_POST['password']);
if (crypt($pwdEntered, $pwdHashed) == $pwdHashed){
// do something
}
您还可以添加一个暴力力量保护,可能带有一个日志文件
我建议您使用PDO而不是普通的mysql connect。确保网站安全的最佳方法是使用SHA-512加密密码
$rounds = 5000
$cryptedPwd = crypt($password, '$6$rounds=' . $rounds . '$SOMeSILLySTrInG$');
要解密:
$pwdEntered = trim($_POST['password']);
if (crypt($pwdEntered, $pwdHashed) == $pwdHashed){
// do something
}
您还可以添加一个暴力力量保护,可能带有一个日志文件
我建议您使用PDO而不是普通的mysql connect。您使用JS只是与服务器交互的另一种方式,而不是常规浏览。因此,它的安全性并不低于您请求的任何其他页面
如果您将登录凭据发布到PHP页面以检查登录,请像存储常规请求(可能是会话)一样存储信息。现在,每次使用AJAX从服务器请求数据时,都要在服务器端再次检查会话,然后再发回数据。如果未授权,只需返回一个错误。在JS中,您现在可以检查响应并据此采取行动
我的建议是,要使它安全,就要像普通浏览器一样开发每个页面。如果你能做到这一点,那么使用AJAX也是安全的
作为非安全建议。除非你愿意牺牲一些访问者(旧手机、平板电脑或只是禁用js的浏览器),否则不要创建一个只使用javascript的网站。你使用js只是与服务器交互的另一种方式,而不是常规浏览。因此,它的安全性并不低于您请求的任何其他页面
如果您将登录凭据发布到PHP页面以检查登录,请像存储常规请求(可能是会话)一样存储信息。现在,每次使用AJAX从服务器请求数据时,都要在服务器端再次检查会话,然后再发回数据。如果未授权,只需返回一个错误。在JS中,您现在可以检查响应并据此采取行动
我的建议是,要使它安全,就要像普通浏览器一样开发每个页面。如果你能做到这一点,那么使用AJAX也是安全的
作为非安全建议。除非你愿意牺牲一些访问者(旧手机、平板电脑或只是禁用js的浏览器),否则不要创建一个只使用javascript的网站
当涉及到依赖JS的as时,一般的看法是什么
与纯PHP相反,人们是否会进行冗余,这合法吗
简单地说,这是一个JS唯一的网站(大量的网站是免费的)
基于Twitter引导,所以它有点依赖于JS)
我的PHP和JS接口是否正确?(我的饼干还能用吗?)
很难说现在有多少人在禁用javascript的情况下使用互联网,但你的javascript不应该太过拘谨,你的网站也应该在禁用javascript的情况下工作。这不难做到。对于AJAX查询,不应使用.click()
,而应使用.submit()
并将其绑定到表单。这样,您仍然可以仅通过PHP处理表单
这也是最好的做法之一,不要太绑定。在提交按钮上单击()
事件,否则按enter键无法提交表单
然后在PHP中,通过检查$\u服务器['X-Requested-With']
,您将能够知道请求是否已从jQuery发送
然后你可以有两种不同的行为:
if ( isset( $_SERVER['X-Requested-With'] ) ) {
// comes from jQuery
} else {
// basic submit
}
我想这大概就是你应该如何连接你的应用程序
如何创建一种安全的方法,现在使用jQuery.load()将我的
成功登录后的内容
您可以从PHP返回true或false。或者,如果需要重新显示一些数据,可以传递一个json对象。假设您有一个要传回的数据数组
PHP
关于如何确保我的系统安全,有什么一般性建议吗
$(function login() {
$("form .button").click(function () {
// getting form values and assigning variable names
var username = $("form #username").val();
var password = $("form #password").val();
var remember = $("form #remember").val();
// concatenating variables to form the data used by the Ajax post method
var dataString = 'username=' + username + '&password=' + password + '&remember=' + remember;
// begin Ajax post function
$.ajax({
type: "POST",
url: "controls/login/process.php",
data: dataString,
success: function (response) {
if (response == 'success') {
alert("SUCCESS");
} else {
$('.alert').find('span').text('Incorrect username or password');
$('.alert').addClass('alert-error').fadeIn('fast');
}
},
error: function () {
$('.alert').find('span').text('An error occured, try again');
$('.alert').addClass('alert-error').fadeIn('fast');
}
});
return false;
});
});
您以POST(通过AJAX)方式发送数据,这并不比以正常方式发布数据的安全性差
当涉及到依赖JS的as时,一般的看法是什么
与纯PHP相反,人们是否会进行冗余,这合法吗
简单地说,这是一个JS唯一的网站(大量的网站是免费的)
基于Twitter引导,所以它有点依赖于JS)
我的PHP和JS接口是否正确?(我的饼干还能用吗?)
很难说现在有多少人在禁用javascript的情况下使用互联网,但你的javascript不应该太过拘谨,你的网站也应该在禁用javascript的情况下工作。这不难做到。对于AJAX查询,不应使用.click()
,而应使用.submit()
并将其绑定到表单。这样,您仍然可以仅通过PHP处理表单
这也是最好的做法之一,不要太绑定。在提交按钮上单击()
事件,否则按enter键无法提交表单
然后在PHP中,您将能够了解
$_POST['username'] = mysql_real_escape_string($_POST['username']);
$_POST['password'] = mysql_real_escape_string($_POST['password']);
$_POST['remember'] = (int)$_POST['remember'];
// Escaping all input data
$row = mysql_fetch_assoc(mysql_query("SELECT ID,REFERENCE FROM USER WHERE USERNAME='{$_POST['username']}' AND PASSWORD='{$_POST['password']}'"));
if($row['REFERENCE']) {
$_SESSION['secure'] = false;
// If everything is OK login
$_SESSION['id'] = $row['ID'];
$_SESSION['reference'] = $row['REFERENCE'];
$_SESSION['remember'] = $_POST['remember'];
// Store some data in the session
setcookie('unifyLogin',$_POST['remember']);
// We create the cookie
echo "success";