安全地发送没有https的PHP表单?

时间:2013-03-06 22:22:33

标签: php forms security hash 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几乎一无所知)?

2 个答案:

答案 0 :(得分:10)

  

我还没有使用https,如何才能确保我的注册安全?

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

  

我试过onclick =“password.value = sha256_hash(password.value)”但它根本不起作用。

发送哈希密码对安全性的贡献很小。它会降低(虽然不是很大)攻击者发现用户使用的密码(这将有助于保护回收密码的用户)的风险,但如果他们在传输中嗅探它,那么他们仍然可以知道他们需要什么字符串发送到您的网站以该用户身份登录。

  

是否有可能散列(sha256 / 512)并用javascript加盐?

可能?是。有用的解决这个问题的方法?甚至没有一点点。

如果您需要安全性,请获取SSL支持。

  

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

基本方法是:

  1. 购买或生成证书(生成自己的证书会导致问题,因为它不会被普通用户的浏览器信任的人签名)
  2. 配置您的服务器以使用证书(如何执行此操作取决于服务器,Google是您的朋友,它可以找到these instructions for setting up SSL for Apache HTTPD on a Debian system之类的内容。)

答案 1 :(得分:0)

虽然我确定你可以在发送之前对密码客户端进行限制,但就安全性而言,这对你没什么用。是的,它会阻止原始密码在传输过程中被窥探,但这也会将您的哈希盐暴露给任何有互联网连接的人,因此他们可能只是彩虹表来窃取密码。假设您仍然选择这样做,您是否希望每次有人尝试登录时重新进行重新连接?您最好通过SSL证书进行设置。

至于设置SSL,我很快用谷歌搜索了this。如果您只是在测试自己,那么generating your own certificate应该没问题,但是如果您要进行制作,则需要从注册提供商处购买证书(如verisign)。同样,无论您使用哪种托管服务提供商,都可能会迫使您在测试期间使用购买的服务器。

同样,如果您使用的是共享托管服务提供商,则可能需要向他们寻求安装证书的帮助。