bCrypt的javadoc有如何加密密码的代码:
String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
Run Code Online (Sandbox Code Playgroud)
要检查明文密码是否与先前已经散列的密码匹配,请使用checkpw方法:
if (BCrypt.checkpw(candidate_password, stored_hash))
System.out.println("It matches");
else
System.out.println("It does not match");
Run Code Online (Sandbox Code Playgroud)
这些代码片段向我暗示随机生成的盐被丢弃.是这种情况,还是只是一个误导性的代码片段?
我目前正在使用GWT创建一个站点,在AppEngine上托管.我正在制作我正在制作的自己的登录信息(我知道谷歌提供了一些GWT,但我需要自己的登录系统),而且我一直试图找出会议已经有一段时间了.我找到了一些教程,其中一个我正在阅读的网站是http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ
那里有一节"如何记住登录".我知道如何通过RPC调用获取会话ID并将其存储在cookie中的客户端上.我不明白的是,最终在一天左右后,用户回来了,我应该从cookie中获取会话ID并将其发送回服务器.为了安全地评估会话ID是否合法,我应该在服务器上做什么,并提取有关用户的所有必要信息?
其他问题:1.什么会使会话ID发生变化?2.如果用户在笔记本电脑上,并且用户去了其他地方,该怎么办?他是否仍然可以安全地重新登录,而无需再次输入他的登录名和密码?
谢谢!
〜斯科特
我正在为后端应用程序编写一个小型GWT前端,我想知道GWT应用程序的最佳安全模型?
我正在考虑实现一个RPC方法,该方法从客户端网页接收用户密码的MD5,然后将会话ID传回客户端页面(或失败代码).所有后续调用都只使用会话ID,服务器会跟踪会话ID的IP地址是否与创建会话ID的IP地址相同?
这是GWT应用程序(非ssl)身份验证的标准机制吗?
如果没有,有人可以建议替代解决方案?
谢谢,
我知道已经有很多问题,但我似乎还没有找到明确的答案.我要做的是让用户在登录2周后或者直到他们退出时才会被记住.以下是我认为应该发生的事情,我想知道是否有更多经验的人可以告诉我,我是对还是错.
用户首次登录.对服务器的RPC调用返回一个"UserInfo"对象,其中包含一个新的sessionID.服务器上的Aka会发生并user返回:
user.setSessionId(getThreadLocalRequest().getSession().getId());
现在user返回后,我们必须创建Cookie来存储客户端数据.我正确地说我们需要一个Cookie来识别当前用户而另一个用于sessionID:
final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login - 2 weeks
Date expires = new Date(System.currentTimeMillis() + DURATION);
String sessionID = user.getSessionId();
String username = user.getUsername();
Cookies.setCookie("sessionID", sessionID, expires, null, "/", false);
Cookies.setCookie("username", username, expires, null, "/", false);
Run Code Online (Sandbox Code Playgroud)
现在,当用户稍后返回应用程序时,我们检查cookie并且(如果它们存在且由于某些原因(例如显式从用户注销)未被删除)使用它们的值来通过RPC检查会话有效性服务器:
String sessionID = Cookies.getCookie("sessionID");
String username = Cookies.getCookie("username");
if ( sessionID != null && username != null){
AsyncCallback<UserInfo> callBack = new AsyncCallback<UserInfo>(){
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我有GWT AJAX代码,但服务器端是PHP而不是JAVA.现在我需要登录到服务器端PHP服务器.但我需要连接SSL.
解决方案的可能性我在想:
他们是对的吗?
如果有一些丢失的配置,那么任何人都可以通知我吗?
我刚刚设置了一个代理,并通过该代理运行我的所有请求.
我调查了几个不同的应用程序:它们传递登录和密码对raw,即我可以从POST请求参数中获取它们.
如何实现它以使其更安全?(我还没有调查过gmail和facebook,但我认为他们没有这个问题.否则,任何网吧都可以收集其客户的所有账户,例如).
PS我调查了用JSP和GWT编写的网站.
gwt程序中的一个例外
java.lang.ExceptionInInitializerError
[ERROR] Unable to bind socket on port 9997 -- is another session active?
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.bind(ServerSocket.java:277)
at com.google.gwt.dev.shell.BrowserListener.<init>(BrowserListener.java:67)
at com.google.gwt.dev.DevModeBase.ensureCodeServerListener(DevModeBase.java:898)
at com.google.gwt.dev.DevModeBase.doStartup(DevModeBase.java:888)
at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1030)
at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:783)
at com.google.gwt.dev.DevMode.main(DevMode.java:275)
log4j:WARN No appenders could be found for logger (org.apache.jasper.compiler.JspRuntimeContext).
log4j:WARN Please initialize the log4j system properly.
Starting Jetty on port 8888
[WARN] failed SelectChannelConnector@127.0.0.1:8888
java.net.BindException: Address already in use
at sun.nio.ch.Net.bind(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:205)
at …Run Code Online (Sandbox Code Playgroud)