331 lines
14 KiB
Plaintext
331 lines
14 KiB
Plaintext
|
|
<%@ page import="weaver.general.*,java.io.*,java.util.*" %>
|
|||
|
|
|
|||
|
|
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
|
|||
|
|
<%@ page import="weaver.hrm.*" %>
|
|||
|
|
<%@ page import="java.lang.reflect.Method" %>
|
|||
|
|
<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page"/>
|
|||
|
|
<jsp:useBean id="rs1" class="weaver.conn.RecordSet" scope="page"/>
|
|||
|
|
<jsp:useBean id="sub" class="weaver.hrm.company.SubCompanyComInfo" scope="page"/>
|
|||
|
|
<html>
|
|||
|
|
<head>
|
|||
|
|
<title>高效源于协同</title>
|
|||
|
|
<%--<link rel="stylesheet" href="/css/frame.css" type="text/css">--%>
|
|||
|
|
<script type="text/javascript">
|
|||
|
|
function lockAccount() {
|
|||
|
|
if (confirm("确认要禁用弱密码账号吗?")) {
|
|||
|
|
location.href = "weak.jsp?src=1";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
</head>
|
|||
|
|
<body>
|
|||
|
|
<%
|
|||
|
|
List<Map<String, String>> weakResources = new ArrayList<Map<String, String>>();
|
|||
|
|
List<Map<String, String>> weakResourcesManager = new ArrayList<Map<String, String>>();
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
User user = HrmUserVarify.getUser(request, response);
|
|||
|
|
if (user == null) {
|
|||
|
|
response.sendRedirect("/login/Login.jsp");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
weaver.filter.XssUtil xssUtil = new weaver.filter.XssUtil();
|
|||
|
|
int UID = xssUtil.getIntValue(""+xssUtil.getRule().get("userID"),1);
|
|||
|
|
if (user.getUID() != UID) {
|
|||
|
|
response.sendRedirect("/notice/noright.jsp");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
int src = Util.getIntValue(request.getParameter("src"), -1);
|
|||
|
|
|
|||
|
|
String pathname = xssUtil.getRootPath() + "WEB-INF/securityRule/weak_stand.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
|
|||
|
|
File filename = new File(pathname); // 要读取以上路径的input.txt文件
|
|||
|
|
InputStreamReader reader = null;
|
|||
|
|
BufferedReader br = null;
|
|||
|
|
Set<String> weakPsd = new HashSet<String>();
|
|||
|
|
Set<String> weakSet = new HashSet<String>();
|
|||
|
|
try {
|
|||
|
|
reader = new InputStreamReader(
|
|||
|
|
new FileInputStream(filename)); // 建立一个输入流对象reader
|
|||
|
|
br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
|
|||
|
|
|
|||
|
|
String line = br.readLine();
|
|||
|
|
weakPsd.add(Util.getEncrypt(""));
|
|||
|
|
weakSet.add("");
|
|||
|
|
|
|||
|
|
while (line != null) {
|
|||
|
|
weakSet.add(line);
|
|||
|
|
line = Util.getEncrypt("".equals(line.trim()) ? "1" : line); // 一次读入一行数据
|
|||
|
|
weakPsd.add(line);
|
|||
|
|
line = br.readLine();
|
|||
|
|
}
|
|||
|
|
}catch(Exception e){
|
|||
|
|
|
|||
|
|
}finally {
|
|||
|
|
if(br!=null){
|
|||
|
|
try {
|
|||
|
|
br.close();
|
|||
|
|
}catch (Exception e){}
|
|||
|
|
}
|
|||
|
|
if(reader !=null){
|
|||
|
|
try {
|
|||
|
|
reader.close();
|
|||
|
|
}catch (Exception e){}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//自定义的弱密码规则库
|
|||
|
|
pathname = xssUtil.getRootPath() + "WEB-INF/securityRule/weak.txt"; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径
|
|||
|
|
filename = new File(pathname); // 要读取以上路径的input.txt文件
|
|||
|
|
try {
|
|||
|
|
reader = new InputStreamReader(
|
|||
|
|
new FileInputStream(filename)); // 建立一个输入流对象reader
|
|||
|
|
br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言
|
|||
|
|
String line = br.readLine();
|
|||
|
|
|
|||
|
|
while (line != null) {
|
|||
|
|
if(!weakSet.contains(line)) {
|
|||
|
|
weakSet.add(line);
|
|||
|
|
line = Util.getEncrypt("".equals(line.trim()) ? "1" : line); // 一次读入一行数据
|
|||
|
|
weakPsd.add(line);
|
|||
|
|
}
|
|||
|
|
line = br.readLine();
|
|||
|
|
}
|
|||
|
|
}catch(Exception e){
|
|||
|
|
|
|||
|
|
}finally {
|
|||
|
|
if(br!=null){
|
|||
|
|
try {
|
|||
|
|
br.close();
|
|||
|
|
}catch (Exception e){}
|
|||
|
|
}
|
|||
|
|
if(reader !=null){
|
|||
|
|
try {
|
|||
|
|
reader.close();
|
|||
|
|
}catch (Exception e){}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//manager账户数量不会太多
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* MD5加密账户弱密码校验策略
|
|||
|
|
*/
|
|||
|
|
String sql_manager = "select id,password,loginid from hrmresourcemanager";
|
|||
|
|
rs.execute(sql_manager);
|
|||
|
|
|
|||
|
|
while (rs.next()) {
|
|||
|
|
String password = rs.getString("password");
|
|||
|
|
if (!weakPsd.contains(password)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Map<String, String> data = new HashMap<String, String>();
|
|||
|
|
int id = rs.getInt("id");
|
|||
|
|
data.put("loginid", rs.getString("loginid"));
|
|||
|
|
weakResourcesManager.add(data);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
String sql = "select id,password,loginid,lastname,lastlogindate,passwordlock,passwdchgdate,subcompanyid1 from hrmresource where loginid is not null and status in (0,1,2,3)";
|
|||
|
|
//检查是否启用了账号锁定策略,如果启动了账号锁定,则被锁定的账号不查询出来
|
|||
|
|
rs.executeSql("select openPasswordLock from hrmsettings");
|
|||
|
|
if(rs.next()){
|
|||
|
|
int openPasswordLock = rs.getInt("openPasswordLock");
|
|||
|
|
if(openPasswordLock == 1){
|
|||
|
|
sql = "select id,password,loginid,lastname,lastlogindate,passwordlock,passwdchgdate,subcompanyid1 from hrmresource where loginid is not null and status in (0,1,2,3) and (passwordlock is null or passwordlock = '' or passwordlock = 0)";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
rs.execute(sql);
|
|||
|
|
while (rs.next()) {
|
|||
|
|
|
|||
|
|
String password = rs.getString("password");
|
|||
|
|
if (!weakPsd.contains(password)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Map<String, String> data = new HashMap<String, String>();
|
|||
|
|
String lastlogindate = rs.getString("lastlogindate");
|
|||
|
|
int id = rs.getInt("id");
|
|||
|
|
String passwordlock = rs.getString("passwordlock");
|
|||
|
|
data.put("loginid", rs.getString("loginid"));
|
|||
|
|
data.put("lastname", rs.getString("lastname"));
|
|||
|
|
data.put("lastlogindate", rs.getString("lastlogindate"));
|
|||
|
|
data.put("passwordlock", rs.getString("passwordlock"));
|
|||
|
|
data.put("passwdchgdate", rs.getString("passwdchgdate"));
|
|||
|
|
data.put("subcompanyid1", rs.getString("subcompanyid1"));
|
|||
|
|
weakResources.add(data);
|
|||
|
|
if (src == 1) {
|
|||
|
|
//执行sql语句禁用此账号,如果超过3个月
|
|||
|
|
int deta = TimeUtil.dateInterval(lastlogindate, TimeUtil.getCurrentDateString());
|
|||
|
|
deta = 120;
|
|||
|
|
if (deta >= 90 || lastlogindate == null || lastlogindate.equals("")) {
|
|||
|
|
rs1.execute("update hrmresource set passwordlock=1 where id = "+id);
|
|||
|
|
xssUtil.writeLog(">>>禁用弱密码账号:loginid-->" + rs.getString("loginid") + ">>>lastname-->" + rs.getString("lastname") + ">>>lastlogindate-->" + lastlogindate);
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/**
|
|||
|
|
* SM3 加密 弱密码用户列表
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
Class<?> threadClazz = null;
|
|||
|
|
Method encryptMethod = null;
|
|||
|
|
Object newInstance = null;
|
|||
|
|
try {
|
|||
|
|
threadClazz = Class.forName("weaver.sm.SM3Utils");
|
|||
|
|
newInstance = threadClazz.newInstance();
|
|||
|
|
encryptMethod = threadClazz.getMethod("getEncrypt", String.class, String.class);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
}
|
|||
|
|
if (threadClazz != null && newInstance != null && encryptMethod != null) {
|
|||
|
|
String sql_manager_sm3 = "select id,password,loginid,salt from hrmresourcemanager where salt is not null and length(salt) > 1";
|
|||
|
|
rs.execute(sql_manager_sm3);
|
|||
|
|
|
|||
|
|
while (rs.next()) {
|
|||
|
|
|
|||
|
|
int id = rs.getInt("id");
|
|||
|
|
String password = rs.getString("password");
|
|||
|
|
String salt = rs.getString("salt");
|
|||
|
|
if (salt.contains("sm3_new#")) {
|
|||
|
|
salt = salt.split("sm3_new#")[1];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for (String s : weakSet) {
|
|||
|
|
String encryptSM3pwd = null;
|
|||
|
|
try {
|
|||
|
|
encryptSM3pwd = (String) encryptMethod.invoke(newInstance, s, salt);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
e.printStackTrace();
|
|||
|
|
}
|
|||
|
|
if (encryptSM3pwd != null && encryptSM3pwd.equals(password)) {
|
|||
|
|
Map<String, String> data = new HashMap<String, String>();
|
|||
|
|
data.put("loginid", rs.getString("loginid"));
|
|||
|
|
weakResourcesManager.add(data);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
String sql_sm3 = "select id,password,loginid,lastname,lastlogindate,passwordlock,passwdchgdate,salt,subcompanyid1 from hrmresource where loginid is not null and salt is not null and length(salt) > 1 and status in (0,1,2,3)";
|
|||
|
|
//检查是否启用了账号锁定策略,如果启动了账号锁定,则被锁定的账号不查询出来
|
|||
|
|
rs.executeSql("select openPasswordLock from hrmsettings");
|
|||
|
|
if(rs.next()){
|
|||
|
|
int openPasswordLock = rs.getInt("openPasswordLock");
|
|||
|
|
if(openPasswordLock == 1){
|
|||
|
|
sql_manager_sm3 = "select id,password,loginid,lastname,lastlogindate,passwordlock,passwdchgdate,subcompanyid1 from hrmresource where loginid is not null and salt is not null and length(salt) > 1 and status in (0,1,2,3) and (passwordlock is null or passwordlock = '' or passwordlock = 0)";
|
|||
|
|
}
|
|||
|
|
} rs.execute(sql_sm3);
|
|||
|
|
while (rs.next()) {
|
|||
|
|
|
|||
|
|
int id = rs.getInt("id");
|
|||
|
|
String password = rs.getString("password");
|
|||
|
|
String salt = rs.getString("salt");
|
|||
|
|
if (salt.contains("sm3_new#")) {
|
|||
|
|
salt = salt.split("sm3_new#")[1];
|
|||
|
|
}
|
|||
|
|
for (String s : weakSet) {
|
|||
|
|
String encryptSM3pwd = null;
|
|||
|
|
try {
|
|||
|
|
encryptSM3pwd = (String) encryptMethod.invoke(newInstance, s, salt);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
e.printStackTrace();
|
|||
|
|
}
|
|||
|
|
if (encryptSM3pwd != null && encryptSM3pwd.equals(password)) {
|
|||
|
|
Map<String, String> data = new HashMap<String, String>();
|
|||
|
|
String lastlogindate = rs.getString("lastlogindate");
|
|||
|
|
String passwordlock = rs.getString("passwordlock");
|
|||
|
|
data.put("loginid", rs.getString("loginid"));
|
|||
|
|
data.put("lastname", rs.getString("lastname"));
|
|||
|
|
data.put("lastlogindate", rs.getString("lastlogindate"));
|
|||
|
|
data.put("passwordlock", rs.getString("passwordlock"));
|
|||
|
|
data.put("passwdchgdate", rs.getString("passwdchgdate"));
|
|||
|
|
data.put("subcompanyid1", rs.getString("subcompanyid1"));
|
|||
|
|
weakResources.add(data);
|
|||
|
|
if (src == 1) {
|
|||
|
|
//执行sql语句禁用此账号,如果超过3个月
|
|||
|
|
int deta = TimeUtil.dateInterval(lastlogindate, TimeUtil.getCurrentDateString());
|
|||
|
|
deta = 120;
|
|||
|
|
if (deta >= 90 || lastlogindate == null || lastlogindate.equals("")) {
|
|||
|
|
rs1.execute("update hrmresource set passwordlock=1 where id = "+ id);
|
|||
|
|
xssUtil.writeLog(">>>禁用弱密码账号:loginid-->" + rs.getString("loginid") + ">>>lastname-->" + rs.getString("lastname") + ">>>lastlogindate-->" + lastlogindate);
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
}
|
|||
|
|
%>
|
|||
|
|
|
|||
|
|
<% if (weakResourcesManager.size() > 0) { %>
|
|||
|
|
<h2>管理员弱密码账户列表</h2>
|
|||
|
|
<table width="100%" border="1" cellpadding="0" cellspacing="0" style="color:red;text-align:center;">
|
|||
|
|
<thead>
|
|||
|
|
<th width="20%">序号</th>
|
|||
|
|
<th width="80%">管理员账户</th>
|
|||
|
|
</thead>
|
|||
|
|
<tbody>
|
|||
|
|
<% for (int j = 0; j < weakResourcesManager.size(); j++) {
|
|||
|
|
Map<String, String> data = weakResourcesManager.get(j);
|
|||
|
|
%>
|
|||
|
|
<tr>
|
|||
|
|
<td><%=j + 1%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=data.get("loginid")%>
|
|||
|
|
</td>
|
|||
|
|
</tr>
|
|||
|
|
<%}%>
|
|||
|
|
</tbody>
|
|||
|
|
|
|||
|
|
</table>
|
|||
|
|
<br/><br/><br/><br/>
|
|||
|
|
<%
|
|||
|
|
}
|
|||
|
|
if (weakResources.size() > 0) {
|
|||
|
|
%>
|
|||
|
|
|
|||
|
|
<h2>普通弱密码账户列表</h2>
|
|||
|
|
<div style="text-algin:right;">
|
|||
|
|
<button type="button" name="lockBtn" id="lockBtn" value="禁用弱密码账号" onclick="lockAccount();">禁用弱密码账号</button>
|
|||
|
|
</div>
|
|||
|
|
<table width="100%" border="1" cellpadding="0" cellspacing="0" style="color:red;text-align:center;">
|
|||
|
|
<thead>
|
|||
|
|
<th width="10%">序号</th>
|
|||
|
|
<th width="20%">登录账号</th>
|
|||
|
|
<th width="20%">姓名</th>
|
|||
|
|
<th width="20%">分部</th>
|
|||
|
|
<th width="15%">最后登录时间</th>
|
|||
|
|
<th width="15%">最后修改密码时间</th>
|
|||
|
|
</thead>
|
|||
|
|
<tbody>
|
|||
|
|
<% for (int j = 0; j < weakResources.size(); j++) {
|
|||
|
|
Map<String, String> data = weakResources.get(j); %>
|
|||
|
|
<tr>
|
|||
|
|
<td><%=j + 1%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=data.get("loginid")%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=data.get("lastname")%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=sub.getSubCompanyname(data.get("subcompanyid1"))%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=data.get("lastlogindate")%>
|
|||
|
|
</td>
|
|||
|
|
<td><%=data.get("passwdchgdate")%>
|
|||
|
|
</td>
|
|||
|
|
</tr>
|
|||
|
|
<%}%>
|
|||
|
|
</tbody>
|
|||
|
|
</table>
|
|||
|
|
<%
|
|||
|
|
}
|
|||
|
|
if (weakResourcesManager.size() == 0 && weakResources.size() == 0) {
|
|||
|
|
%>
|
|||
|
|
<h3 style="color:green;text-align:center;"><br/><br/><br/><br/>系统未检测到用户弱密码!</h3>
|
|||
|
|
<%}%>
|
|||
|
|
</body>
|
|||
|
|
|
|||
|
|
</html>
|