MySQL安全加固实战

分类:CentOS运维 阅读:93960 次

* * @author not attributable * @version 1.0 */ public class MD5 { public MD5() { } /** * MD5加密 Computes the MD5 fingerprint of a string. * * @return the MD5 digest of the input <code>String</code> */ public static String compute(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) { byteArray[i] = (byte) charArray[i]; } byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } /** * 验证MD5 * * @param compareStr * String 要比较的字符串 * @param md5Str * String 加密后的字符串 * @return boolean 验证通过返回true,否则返回false */ public static boolean compare(String compareStr, String md5Str) { String computeStr = compute(compareStr); if (computeStr.equals(md5Str)) { return true; } else { return false; } } public static void main(String[] args) { System.out.println("aa:==" + compute("aa")); System.out.println(compare("aa", "4124bc0a9335c27f086f24ba207a4912")); } } 2)对数据库提权漏洞问题:一、采取数据库系统账号与应用账号分离即创建应用程序需要访问的账号;二、采取收缩权限并设置指定IP地址可以远程访问数据库; 具体步骤: A) delete from user where user="root" and host!="localhost"; B) flush privileges; C) grant select,insert,update,delete on itwh.* to myapp@"10.0.212.122" identified by "youpassword"; D) flush privileges; 3)对用户密码进行加密保存; 此处使用了md5加密算法实现用户信息使用密文保存,这样带来的好处是运维人员也无法在未经用户授权情况下登陆用户的系统,查看某用户涉密相关信息等。 4)上传附件校验有黑名单转变成白名单方式,具体实现方式因与本文关联不大在此不再赘述。