安全发送一个php表单没有https


Securely send a php form without https?

我是新来的网站安全,我需要做一个注册和登录系统。我还没有使用https,我怎样才能使我的注册安全?

这是我的注册表单,index.php,我使用ajax传递表单值给create_account.php。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
function submitForm() {
    $.ajax({type:'POST', url: 'create_account.php', data:$('#ContactForm').serialize(), success: function(response) {
        $('#ContactForm').find('.form_result').html(response);
    }});
    return false;
}
</script>
<form id="ContactForm" onsubmit="return submitForm();" method="POST">
   <input type="text" name="fname" value=""/> 
   <input type="text" name="lname" value="" />
   <input type="text" name="email" value="" />
   <input type="text" name="vEmail" value="" /> 
   <input type="password" name="password" value="" />
   <input type="password" name="vPassword" value="" />
   <input type="submit" name="submit" value="Submit" onclick="password.value=sha256_hash(password.value)"/>
<div class="form_result"> 

我尝试了onclick="password.value=sha256_hash(password.value)",但它根本不起作用。现在我不确定攻击者如何获得从index.php发送到create_account.php的信息。是否有可能哈希(sha256/512)和盐它与javascript?在create_account.php中,我已经做了这种类型的安全性。

如果不可能,我们如何设置https(我对ssl几乎一无所知)?

我还没有使用https,我怎样才能使我的注册安全?

开始使用HTTPS任何其他方法都是疯狂的,而且不安全。

我试过onclick="password.value=sha256_hash(password.value)",但根本不起作用。

发送散列密码对安全性的贡献很小。这将减少(虽然不是很大的数量)攻击者发现用户使用的密码的风险(这将有助于保护那些重复使用密码的用户),但如果他们在传输过程中嗅探密码,那么他们仍然可以知道他们需要发送什么字符串到您的站点以该用户登录。

是可能的哈希(sha256/512)和盐与javascript?

可能吗?是的。作为解决这个问题的手段有用吗?一点也不。

如果你想要安全,获得SSL支持。

如果不可能,我们如何设置https(我对ssl几乎一无所知)?

基本方法是:

  1. 购买或生成证书(生成您自己的证书将导致问题,因为它不会由普通用户的浏览器信任的人签名)
  2. 配置你的服务器使用证书(你怎么做取决于服务器,谷歌是你的朋友在这里,它可以找到类似的东西为Apache HTTPD在Debian系统上设置SSL的说明)

虽然我确信您可以在发送密码之前在客户端添加密码,但就安全性而言,这不会对您有多大帮助。是的,它可以防止原始密码在传输过程中被窥探,但这也会将你的哈希盐暴露给任何有互联网连接的人,所以他们可以用彩虹表来窃取密码。假设您仍然选择这样做,您希望每次有人尝试登录时都重新进行hash吗?您最好购买SSL证书并设置它。

关于设置SSL,我很快在谷歌上找到了这个。如果您只是在测试自己,那么您应该可以生成自己的证书,但是如果要进行生产,则需要从注册提供商(如verisign)购买证书。同样,无论你使用的是哪个主机提供商,即使在测试期间,也可能会强迫你使用购买的主机。

同样,如果您使用的是共享主机提供商,您可能需要向他们寻求帮助来安装您的证书。