Atitit 修改密码的功能流程设计 attilax总结
Atitit 修改密码的功能流程设计 attilax总结
1.1. 注意点
Req参数需要根据数据库转义,防止sql注入
要输入原密码验证,防止CSRF注入
会话管理防止uid篡改。。建议uid存放在cookie并且aes加密
后台获取uid cookie使用tokenService方式注入。可以灵活支持session,cookie等模式。
在修改密码的过程中,毫不夸张地说,有超过1成的产品找回密码流程存在「越权修改密码」的逻辑漏洞。
1.2. 设计修改用户密码功能时把用户ID保存在哪里?
建议uid存放在cookie并且aes加密
1.3. Ui设计
file:///C:/BaiduYunDownload/atiPlatf_cms_com_2016-11-02%20周三%2023-49-21.66/WebRoot/chgPwd/chgpwd.htm
大概三个box,一个原来密码,俩个新密码。。
1.4. 功能设计源码
function clickx()
{
try{
var jsbrj=newAtiJsBridge();
var dsl="com.attilax.ioc.Ioc4agent.getBean(com.attilax.agent.AgtSrv.class).resetPwd('@old@','@new@')";
dsl=dsl.replace("@old@",$("#old_password").val());
dsl=dsl.replace("@new@",$("#password").val());
//jsbrj.method="post";
var para={};
para.dsl=dsl;
para.$uid_cukname="null_uid_agentUtype";
jsbrj.exe(para,function(data){
console.log(data);
if(data==1)
alert("修改成功")
if(data==0)
alert("修改失败");
//$("#content").val(data);
});
//mycallJava("submitx",$("#title").val(),$("#content").val(),dropIds);
}catch(e)
{
alert(e);
}
}
1.5. AgtSrv .java
/**
*
*/
package com.attilax.agent;
import java.util.List;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.attilax.collection.list;
import com.attilax.ioc.Ioc4agent;
import com.attilax.ioc.IocFacV3_iocx_iocutil;
import com.attilax.lang.Global;
import com.attilax.net.cookieUtil;
import com.attilax.net.requestImp;
import com.attilax.sql.SqlService;
import com.attilax.token.TokenServiceV2;
import com.attilax.token.TokenServiceV3;
import com.attilax.user.UserService;
import com.csmy.my.center.util.CTUtils;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
/**
* @author attilax 2016年11月2日 下午4:58:08
*/
public class AgtSrv extends UserService {
public static void main(String[] args) {
System.setProperty( "agent_cfgfile","cfg_game.properties" );
AgtSrv srv=com.attilax.ioc.IocFacV3_iocx_iocutil.getBean("com.attilax.ioc.Ioc4agent",AgtSrv.class);
srv=com.attilax.ioc.Ioc4agent.getBean(com.attilax.agent.AgtSrv.class);
// null_uid_agentUtype
requestImp ri=new requestImp();
ri.setParam("$utype", "agent");
Global.req.set(ri);
Cookie ck=new Cookie("null_uid_agentUtyp", "200006");
List li= Lists.newArrayList ();
li.add(ck);
ri.setcookies(li);
try {
System.out.println(srv.resetPwd("1111", "222222"));
} catch (CantFindUserInTokenSrv e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("--f");
}
@Inject
SqlService sqlSrv;
@Inject
TokenServiceV3 tkSrv;
public Object resetPwd(String oldPwd, String newPwd) throws CantFindUserInTokenSrv {
HttpServletRequest req = Global.req.get();
//HttpSession sess = req.getSession();
String uid = tkSrv.getuid();
if(uid.equals(""))
throw new CantFindUserInTokenSrv("uid:"+uid);
// Set<String> capts = (Set<String>) sess.getAttribute("captSet");
// if (capts == null)
// throw new RuntimeException("chkex,capt_null,验证码错误capt_null");
// if (!capts.contains(req.getParameter("captcha")))
// throw new RuntimeException("chkex,capt_err,验证码错误");
String sql = "update agent set pwd='$pwd$' where uid='$acc$' and pwd='$old$'";
// String pwd = req.getParameter("password");
sql = sql.replace("$old$", oldPwd);
sql = sql.replace("$pwd$", newPwd);
sql = sql.replace("$acc$", uid);
System.out.println("--resetPwd:" + sql);
return sqlSrv.executeUpdate(sql);
// StringUtil.getAttrFromPro("ct_user_password", null)));
}
}
参考资料
修改密码的表单设计及整体体验 - 站长之家.html
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )
汉字名:艾提拉(艾龙), EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
Atiend
Atitit 修改密码的功能流程设计 attilax总结的更多相关文章
- Atitit.二维码功能的设计实践 attilax 总结
Atitit.二维码功能的设计实践 attilax 总结 1.1. 二维码要实现的功能1 1.2. 现有二维码功能设计不足的地方(待改进)1 1.3. 二维码组件1 1.4. Java版 zxing ...
- Atitit.收银机小票打印功能的设计 java php c#.net版本
Atitit.收银机小票打印功能的设计 java php c#.net版本 1. 1. 打印方式有4种:1 1.1. 1.1. 一是不经过任何修改,直接调用javascript中的window.pr ...
- Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
Atitit.ati dwr的原理and设计 attilax 总结 java php 版本 1. dwr的优点相对于ajax来说..1 2. DWR工作原理1 3. Dwr的架构2 4. 自定义dwr ...
- Liferay 6.2 改造系列之七:关闭使用条款确认、密码提醒、新用户强制修改密码等功能
关闭使用条款确认: 在/portal-master/portal-impl/src/portal.properties配置文件中,有如下配置: # # Set this to true if all ...
- 用java语言写一个简易版本的登录页面,包含用户注册、用户登录、用户注销、修改密码等功能
package com.Summer_0421.cn; import java.util.Arrays; import java.util.Scanner; /** * @author Summer ...
- Sharepoint增加修改密码功能
Sharepoint中没有自带的修改密码的功能. 如果使用的是AD验证,修改密码,只要修改域帐号的用户名密码就可以了.以下代码可以修改本机密码和域帐号密码. 做法是,添加一个webpart,做一个页面 ...
- 为VisualSVN Server增加在线修改用户密码的功能
原文:为VisualSVN Server增加在线修改用户密码的功能 附件下载:点击下载 VisualSVN Server是一个非常不错的SVN Server程序,方便,直观,用户管理也异常方便. 不过 ...
- django用户认证系统——修改密码6
再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...
- 【系统设计】WMS系统中 库存、盘点、移库、拆库功能的设计(库内管理)
最近负责WMS系统 盘点 移库 两个功能模块的功能及数据库设计. 物流仓储系统的搭建,要基于仓库的实际情况,整理内部员工需求,再参考其他WMS系统,经过长时间的讨论和研究,最终转化为产品需求. 这里先 ...
随机推荐
- Linux 忘记root登录密码解决方法
很多朋友经常会忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如下: 重启linux系统 3 ...
- 彻底弄懂js循环中的闭包问题
来源:http://www.108js.com/article/article1/10177.html?id=899 第一次接触这个问题还是在我刚开始学js的时候,当时就是一头雾水,时隔一年多了,突然 ...
- C#自旋的艺术
CODE1: while (status == ServerStatus.Started) { if (*TaskLocker > 0) { for (int i = 0; i != *Leve ...
- jqm页面跳转问题
jqm里面页面跳转默认都是通过ajax请求的,必须重新刷新页面js方可有效,也就是js没有起作用,并不是js本身的问题,下面说说解决方法: 在使用jQuery Mobile进行Web开发中,当页面跳转 ...
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- wp学习计划!
对wp兴趣很大,可真正学习时,目的性就很不明确了,其实这有两大问题阻碍着,一是自身的基础还不够扎实,二是学习资料不好找,前者只能慢慢积累,而后者却是可以改变的,现在我的主阵营是channel 9上的w ...
- [1008]harder_prime
素数定义:一个大于1的整数,如果它的约数如果只有1和它本身,那么它就是一个素数. 回文数定义:一个整数把它的各位数字倒过来还是它本身,那么它就是回文数,比如说2,99,393. 回文素数定义:一个数如 ...
- .Net mvc 后台传单引号错误'
今天调试半天程序 结果出现JS 无法eval() 网上找个半天解决办法无果 最后 是因为后台输出单引号’ 到前台为' 解决办法 给一个隐藏文本框或者标签赋值 再取出来就能显示单引号了
- Android 事件拦截机制一种粗鄙的解释
对于Android事件拦截机制,相信对于大多数Android初学者是一个抓耳挠腮难于理解的问题.其实理解这个问题并不困难. 首先,你的明白事件拦截机制到底是怎么一回事?这里说的事件拦截机制,指的是对触 ...
- listview(3、动态刷新)
listview的动态刷新主要是调用adapter的notifyDataSetChanged. 在下面的例子中除了记录正常的刷新外,还记录一种错误的情况(注释掉的),作为备忘. notifyDataS ...