Ajax身份验证响应

时间:2010-03-22 12:22:57

标签: ajax authentication rpc

我有一个登录表单,我正在考虑它是否应该是'ajax'ed 我考虑这个的原因是因为如果ajax调用的响应是固定的(如0表示无效,1表示有效),我可以通过javascript控制台重定向ajax请求并恶意登录系统。 有没有办法解决这个安全问题?
这就是为什么我到目前为止看到的所有登录表单(包括stackoverflow)都是非ajax?

2 个答案:

答案 0 :(得分:2)

您需要确保只有登录用户显示的所有内容才应在登录过程后转移。服务器端应该检查用户是否登录的每个请求。这可以通过传统方法完成(例如cookie或post / get中的会话ID)。

简而言之:不要传输固定值,而是传输一个不同用户的正常会话ID。

答案 1 :(得分:1)

您使用ajax执行登录。

服务器端验证登录并启动会话。

即使客户端忽略了来自ajax调用的响应,重要的是任何ajax调用都会检查会话是否在登录时正确创建,并且拒绝执行会话在登录时是否正确打开的问题。 / p>

在PHP(示例)中:

登录:

<?php
header('Content-type: text/json');

session_start();

if ( check_password() ) {
  // send ok response
}
else {
  // send not ok response
}

// if that session variable exists, then we logged in successfully
$_SESSION['user']    = $user;

其他ajax电话:

<?php
header('Content-type: text/json');
session_start();

if ( ! isset($_SESSION['user'] )) {
  // send not ok response 
  // on the client, this will redirect to the login page
  exit;
}

$user=$_SESSION['user'];

... rest of the code here

对于每个ajax调用,当响应到达时,您应首先检查响应是否正常 - 由您决定如何表示响应。

作为示例,响应可能看起来像JSON,如

  • 未记录:{ "ok":"N","error":"not logged in"}
  • 已记录:{ "ok":"Y","data":[{"name":"xxxx","age":19},{"name":"yyy","age":91}]}
  • { "ok":"Y","data":"Some text"}

等等...

如果没问题,则继续处理响应。如果没有,您可以例如重定向到登录页面。

请注意,使用PHP,您所做的每个ajax调用都会自动包含会话ID(它是一个cookie),因此PHP知道哪个会话与特定请求相关联。