如何保护我的登录页面

如何保护我的登录页面,第1张

如何保护我的登录页面

这确实属于prereview.stackexchange.com,但无论如何我都会试一试。

首先,我将向您的表单添加一个csrf令牌以阻止这些类型的攻击。

//the most simple type of csrf tokenif (!isset($_SESSION['token'])):    $token = md5(uniqid(rand(), TRUE));    $_SESSION['token'] = $token;else:    $token = $_SESSION['token'];endif;

然后在您的表单中,包含一个隐藏的输入字段:

<input type="hidden" name="token" id="token" value="<?php echo $token; ?>"/>

然后在您的ajax中添加令牌。

var usrnm = $('#usrnm').val();var pswdlogin = $('#pswdlogin').val();var token = $('#token').val();{    usrnm: usrnm,    pswdlogin: pswdlogin,    token: token}

然后在您的php中,让我们直接停止访问该页面时发生的未定义索引错误。

$usrnm_original = isset($_POST['usrnm'])?$_POST['usrnm']:false;$pswdlogin_original = isset($_POST['pswdlogin'])?$_POST['pswdlogin']:false;$token = isset($_POST['token'])$_POST['token']:false;

然后,我们需要检查传递的令牌是否与我们的令牌相同

if(!$_SESSION['token'] == $token):    die('CSRF Attacks are not allowed.');endif;

然后

mysqli_query
,即使接受
mysqli_real_escape_string
和使用
prepared
语句进行了消毒,我们也需要在接受用户数据时停止使用。此外,过程样式代码使我哭泣,因此我们将对其进行更改。此外,让我们返回一个带有状态和消息的数组,以便更轻松地处理错误和成功报告。

$ret = array();$mysqli = new mysqli("localhost", "cSDEqLj", "4GFU7vT", "dbname");if($sql = $mysqli->prepare('SELECt * FROM registration WHERe email = ? and password = ?')):    $sql->bind_param('ss', $usrnm_original, $pswd_original);    if($sql->execute()):        $sql->fetch();        if($sql->num_rows > 0): $ret['status'] = true; $ret['msg'] = 'You have successfully logged in! Redirecting you now';        else: $ret['status'] = false; $ret['msg'] = 'The credentials supplied were incorrect. Please try again';        endif;    endif;    $sql->close();    return json_enpre($ret);endif;

现在,我们需要修改您的发布功能。

$.post("http://xyz/mobile/php/logmein.php",{  usrnm: usrnm,  pswdlogin: pswdlogin,  token:token},function(data) {  if (data.status == true) {    window.open("http://xyz/mobile/home.html?email=" + usrnm + "", "_parent");  } else {    alert(data.msg);    $('#loginstatus').text(data.msg);  }}, 'json');

最后,也是最重要的是,您使用了纯文本方式密码方法,从安全角度来看这是没有意义的。这正是您被黑客入侵的方式。相反,您应该至少使用

sha256
哈希方法。更改密码存储在数据库中的使用方式,
sha256
然后将其传递到SQL选择器中进行比较,例如:

$pswdlogin_original = isset($_POST['pswdlogin'])? hash('sha256', $_POST['pswdlogin']):false;

并且当保存在数据库中时,该密码将看起来像

fcec91509759ad995c2cd14bcb26b2720993faf61c29d379b270d442d92290eb
例如。

我的回答是为了清楚起见,但实际上,您甚至不应该重塑事物。那里有大量的应用程序和框架,已经花了无数小时来保护其身份验证系统。我建议您仔细阅读所有这些内容,因为它们将帮助您建立核心编程技能并教授基本的OOP练习。

  • Lararvel 4.x
  • Zend 2
  • hal
  • YII

希望这对您有所帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5174253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存