我已经开始着手一个新的web项目,这一次我想我会更多地考虑如何处理用户身份验证(以前只使用MD5哈希密码)。我觉得我已经搜索了网络的各个角落,寻找一个简单、不过分的解决方案,现在我想知道是否可以实现以下内容:
我的问题如下:
注意:我知道很多人会想说HTTPS/SSL是完成一个安全站点的唯一方法,我听到了,但是由于这个项目的用户不应该超过少数用户都是我手工创建的,而且不会有像金融交易或其他交换的敏感数据这样的安全信息,我只想在登录期间有一个合理的方法来保护密码/数据。在这种情况下,MITM和其他所有的威胁对我来说都没有问题,因为( a)所有的黑客都不会对我的小型私人使用项目感兴趣;( b)任何数据丢失或安全漏洞的计算成本不足以保证购买SSL证书。
任何意见或建议都会受到感谢(即使是那些想指责我是一个吝啬的新手的人;)
发布于 2014-02-22 13:39:26
经过大量的研究和查看代码片段,我最终意识到,无论我在客户端实现了什么样的保护(在Javascript中进行散列,请求非the等等)。增加安全感只是一种错觉。当然,这不会伤害我,但我继续回到“通过默默无闻的安全”的名言。
也许有一种方法可以创建一种智能的、简单的方法来对用户进行身份验证和保护凭据,而无需使用HTTPS/SSL,但我还没有找到它(而且我肯定没有自己的编码技能)。
我想我会加入SSL潮流,省去很多时间和麻烦。
发布于 2014-02-09 01:09:27
1-是的是可能的。您可以发送多个AJAX请求,这些请求可以用一些逻辑来设置,只有在满足特定条件后才能触发和响应。也许您可以考虑使用md5或其他一些受支持的技术在客户端创建随机盐。
是的,在散列敏感信息和清晰发送文本方面,任何事情都比md5更好,这完全是个麻烦。
3-从开放墙进入phpass。它是一个易于实现的开源密码哈希框架,它将帮助您完成正确的工作。一些更大的名字使用它,包括wordpress,等等。如果您是在ajax上设置的话,您将不得不自己做一些修改。
发布于 2014-02-11 02:30:23
<?php
// this is normally where you should include a connection to you database
// to check user input against what is stored
if(isset($_POST["username"])) {
$username = $_POST['username'];
if ($username == "Joe Schmoe") {
echo $username.' is taken';
exit();
} else {
echo $username.' is available';
exit();
}
}
?>
<?php
// this is also where you should include a connection to you database
// to check user input against what is stored
if(isset($_POST["submitIt"])) {
$username = $_POST['submitIt'];
if ($username == "Joe Schmoe") {
echo 'Username is taken';
exit();
} else {
echo 'Success!!';
exit();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<script>
function ajaxObj(meth, url) {
var x = new XMLHttpRequest();
x.open(meth, url, true);
x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
return x;
}
function ajaxReturn(x){
if(x.readyState == 4 && x.status == 200){
return true;
}
}
</script>
<script>
function username_availability() {
var un_value = document.getElementById("username_value").value;
var un_error = document.getElementById("username_error");
var un_status = document.getElementById("username_status");
if (un_value != "") {
var ajax = ajaxObj("POST", "<?php echo $_SERVER['PHP_SELF']; ?>");
ajax.onreadystatechange = function() {
if(ajaxReturn(ajax) == true) {
un_status.innerHTML = ajax.responseText;
}
}
ajax.send("username="+un_value);
}
}
function submitIt() {
var un_value = document.getElementById("username_value").value;
var un_status = document.getElementById("username_status");
var sb_button = document.getElementById("submit_button");
var r_message = document.getElementById("result_message");
var un_form = document.getElementById("username_form");
if (un_value == "") {
un_ststus.innerHTML = "Form data is missing";
} else {
un_status.innerHTML = 'processing...';
var ajax = ajaxObj("POST", "<?php echo $_SERVER['PHP_SELF']; ?>");
ajax.onreadystatechange = function() {
if(ajaxReturn(ajax) == true) {
if(ajax.responseText == "Username is taken") {
un_status.innerHTML = ajax.responseText;
} else {
window.scrollTo(0,0);
r_message.innerHTML = 'Username is yours!!!';
un_status.innerHTML = ajax.responseText;
}
}
}
ajax.send("submitIt=" + un_value);
}
}
</script>
</head>
<body>
<form name="username_form" id="username_form" onsubmit="return false;">
<div>Username: </div>
<input id="username_value" type="text" onkeyup="username_availability()" autofocus>
<button id="submit_button" onclick="submitIt()">Submit</button>
<div id="result_message">Submit Username</div>
<div id="username_status"></div>
</form>
</body>
</html>https://stackoverflow.com/questions/21653564
复制相似问题