首页 文章

Spring 天|如何在发送到服务器之前编码登录密码

提问于
浏览
0

我正在为我的Web应用程序使用spring security . 我想在将密码文本发送到服务器之前对其进行编码 . 以下是我的代码:

spring security.xml文件

<!-- AUTHENTICATION MANAGER -->
    <authentication-manager alias="authenticationManager">

        <!-- AUTHENTICATION PROVIDERS -->
        <!-- Remember-Me Authentication Provider -->
        <authentication-provider ref="rememberMeAuthenticationProvider"></authentication-provider>

        <!--
            Authentication Provider to make use of spring security provided Jdbc
            user management service
        -->
        <authentication-provider user-service-ref="jdbcUserService">
            <!--SHA-1 Password Encoding scheme to secure user credential-->
            <password-encoder ref="sha2PasswordEncoder"  />
        </authentication-provider>
    </authentication-manager>


<!--  SHA-1 Password Encoder -->
    <bean id="sha2PasswordEncoder"
        class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
        <constructor-arg value="256" />
    </bean>

即使使用了这个,我在服务器端以纯文本形式获取密码,我希望使用spring security在服务器端以编码形式获得密码 .

我已经以加密形式将密码存储在数据库中 . 我是Spring的初学者,所以可能这个问题很简单,我遗漏了一些基本的东西 . 任何参考实现都会有所帮助 .

提前致谢 .

4 回答

  • 2

    这就是Spring的工作方式 - 表单将密码以纯文本形式传输到后端,但这是HTTPS中的POST - 黑客如何破解密码?

    (稍后,Spring会对密码进行加密,并与数据库进行比较,其中密码也会被加密)

  • 0

    您应该注意的是运行在HTTPS下提交登录表单的URL . 你提出的几乎所有其他方案都是不安全的 .

    使用HTTPS,浏览器和Web服务器将根据TLS标准处理加密,并且表单中的所有数据将被安全地提交,窃听者很少有机会通过线路收听(或者空中交通) .

    如果您使用数据库来存储密码,那么Spring Security的密码哈希就会发挥作用,因为您绝不应该以明文形式存储密码

  • 1

    尝试使用http://www.webtoolkit.info/javascript-sha256.html之类的东西在浏览器中加密密码

    但是请确保使用基于用户(可以使用AJAX检索)的某种盐来散列密码 .

    请参阅http://www.plynt.com/blog/2006/06/sending-salted-hashes-just-got/的最后一段,参见可能的方法 .

    PS:如果你没有使用TLS / SSL,即使这样做也没有意义,如果你已经在使用它,我认为没有必要为此付出努力,除非你的应用程序需要几乎愤世嫉俗的安全级别 .

    参考:https://softwareengineering.stackexchange.com/a/76947 https://stackoverflow.com/a/3391275/876142

  • 0

    以下是我申请上述问题的解决方案 .

    <script type="text/javascript"
        src="<%=request.getContextPath()%>/tp/web/console/include/js/security/sha256.js"></script>
    <script type="text/javascript"
        src="<%=request.getContextPath()%>/tp/web/console/include/js/security/base64.js"></script>
    <script type="text/javascript"
        src="<%=request.getContextPath()%>/tp/web/console/include/js/security/crypto.js"></script>
    <script type="text/javascript">
        function setPassword() {
            document.getElementById("
        j_password").value = CryptoJS.SHA256(document
                    .getElementById("j_password").value);
    
        }
    </script>
    

    如上面的代码我使用sha256编码器编码密码文本 . 在服务器端,我已禁用 spring 编码器,它编码来自客户端的密码 . 因此,在服务器上,它直接匹配从客户端到db哈希值的散列值 .

相关问题