当前位置: 首页 > news >正文

网站未做安全隐患检测怎么拿shell华为云速建站

网站未做安全隐患检测怎么拿shell,华为云速建站,android获取Wordpress数据库,基础展示型网站1.问题 账密登录方式中用户输入密码后,把账号、密码通过http传输到后端进行校验,然而密码属于敏感信息,不能以明文传输,否则容易被拦截窃取,因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式,r…

1.问题

账密登录方式中用户输入密码后,把账号、密码通过http传输到后端进行校验,然而密码属于敏感信息,不能以明文传输,否则容易被拦截窃取,因此需要考虑如何安全传输密码

2.解决方案

使用rsa加密方式,rsa属于非对称加密,特点就是公钥加密私钥解密

2.1后端生成公钥私钥

生成公私钥,把公钥返回给前端,私钥用redis缓存

ManagerController.java

    @GetMapping("/key")public ResponseEntity<ApiResponse> key(@RequestParam("loginNo") String loginNo) {String key = managerService.generateKey(loginNo);return ApiResponse.success(key);}

ManagerServiceImpl.java

    @Overridepublic String generateKey(String loginNo) {QueryWrapper<Manager> wrapper = new QueryWrapper<>();wrapper.eq("loginNo", loginNo);Manager entity = this.getOne(wrapper);if (Objects.isNull(entity)) {throw new CodeException("用户不存在:loginNo=" + loginNo);}try {KeyPair keyPair = RSAUtil.generateKeyPair();String publicKey = RSAUtil.getPublicKey(keyPair);String privateKey = RSAUtil.getPrivateKey(keyPair);log.info("publicKey={}", publicKey);log.info("privateKey={}", privateKey);String redisKey = RedisKey.MANAGE_LOGIN_RSA_PRIVATEKEY + "$" + loginNo;// 清除缓存redisService.del(redisKey);// 私钥添加到缓存redisService.set(redisKey, privateKey, 5, TimeUnit.MINUTES);return publicKey;} catch (Exception e) {log.error("生成rsa密钥失败", e);}return null;}

RSAUtil.java

public class RSAUtil {private static final Charset CHARSET = StandardCharsets.UTF_8;private static final String ALGORITHM = "RSA";/*** 生成密钥对* @return* @throws NoSuchAlgorithmException*/public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);keyPairGenerator.initialize(1024);return keyPairGenerator.generateKeyPair();}/*** 生成公钥* @param keyPair* @return*/public static String getPublicKey(KeyPair keyPair) {PublicKey publicKey = keyPair.getPublic();byte[] bytes = base64Encode(publicKey.getEncoded());return new String(bytes, CHARSET);}/*** 生成私钥* @param keyPair* @return*/public static String getPrivateKey(KeyPair keyPair) {PrivateKey privateKey = keyPair.getPrivate();byte[] bytes = base64Encode(privateKey.getEncoded());return new String(bytes, CHARSET);}/*** base64加密* @param bytes* @return*/public static byte[] base64Encode(byte[] bytes) {return Base64.getEncoder().encode(bytes);}/*** base64解密* @param bytes* @return*/public static byte[] base64Decode(byte[] bytes) {return Base64.getDecoder().decode(bytes);}/*** base64解密* @param src* @return*/public static byte[] base64Decode(String src) {return Base64.getDecoder().decode(src);}/*** 解密* @param key* @param data* @return* @throws NoSuchAlgorithmException* @throws InvalidKeySpecException* @throws NoSuchPaddingException* @throws InvalidKeyException* @throws IllegalBlockSizeException* @throws BadPaddingException*/public static String decrypt(String key, String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {byte[] bytes = base64Decode(key);PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(bytes);KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");cipher.init(Cipher.DECRYPT_MODE, privateKey);return new String(cipher.doFinal(base64Decode(data.getBytes(CHARSET))), CHARSET);}

2.2前端使用公钥加密

安装这个依赖

npm install jsencrypt@3.2.0
import JSEncrypt from 'jsencrypt';// key为后端返回的公钥,this.form.password为明文密码
const jsEncrypt = new JSEncrypt();
jsEncrypt.setPublicKey(key);
// pwd为加密后的密码
var pwd = jsEncrypt.encrypt(this.form.password);

2.3后端使用私钥解密

从redis获取私钥,用私钥解密,得到明文后和数据库保存的密码比对,数据库的密码是以用户id为盐值对明文密码作md5加密,相同则放行,否则报错,注意登录成功的话需要把redis的密钥移除

ManagerController.java

    @PostMapping("/login")public ResponseEntity<ApiResponse> login(@RequestParam("loginNo") String loginNo, @RequestParam("password") String password)throws Exception {UserDTOWithToken dto = managerService.login(loginNo, password);return ApiResponse.success(dto);}

ManagerServiceImpl.java

    @Overridepublic UserDTOWithToken login(String loginNo, String password) throws Exception {QueryWrapper<Manager> wrapper = new QueryWrapper<>();wrapper.eq("loginNo", loginNo);Manager entity = this.getOne(wrapper);if (Objects.isNull(entity)) {throw new CodeException("用户不存在:loginNo=" + loginNo);}String redisKey = RedisKey.MANAGE_LOGIN_RSA_PRIVATEKEY + "$" + loginNo;// 从缓存获取私钥String privateKey = (String) redisService.get(redisKey);if (StrUtil.isEmpty(privateKey)) {throw new CodeException("私钥不存在");}// 用私钥解密String realPassword = RSAUtil.decrypt(privateKey, password);log.info("realPassword={}", realPassword);// 校验密码Digester digester = new Digester(DigestAlgorithm.MD5);digester.setSalt(entity.getId().getBytes(StandardCharsets.UTF_8));String encodePassword = digester.digestHex(realPassword);log.info("encodePassword={}", encodePassword);if (!encodePassword.equals(entity.getPassword())) {throw new CodeException("密码错误");}//从认证服务获取tokenResponseEntity<ApiResponse> responseEntity = authClient.token(AuthConst.PASSWORD_GRANT_TYPE, AuthConst.ADMIN_CLIENT_ID,AuthConst.ADMIN_CLIENT_SECRET, null, loginNo, password);ApiResponse response = responseEntity.getBody();TokenDTO tokenDTO = response.toObject(TokenDTO.class);if (Objects.isNull(tokenDTO)) {throw new CodeException("获取token失败:" + response.getMessage());}UserDTOWithToken dto = new UserDTOWithToken();dto.setUserId(entity.getId());dto.setToken(tokenDTO);entity.setLoginTime(LocalDateTime.now());Integer loginCount = entity.getLoginCount();entity.setLoginCount(Objects.isNull(loginCount) ? 1 : loginCount + 1);entity.setUpdateTime(LocalDateTime.now());this.updateById(entity);// 成功则清除缓存的私钥redisService.del(redisKey);return dto;}

3.总结

非对称加密还有其它算法,rsa是其中一种

后端存储私钥除了redis也可以用其它缓存工具如J2Cache


文章转载自:
http://teleran.tgnr.cn
http://mabel.tgnr.cn
http://hypophosphatasia.tgnr.cn
http://bold.tgnr.cn
http://biopoiesis.tgnr.cn
http://canoeist.tgnr.cn
http://cutify.tgnr.cn
http://montan.tgnr.cn
http://vinometer.tgnr.cn
http://constitutor.tgnr.cn
http://drawstring.tgnr.cn
http://humanity.tgnr.cn
http://incombustible.tgnr.cn
http://noesis.tgnr.cn
http://vive.tgnr.cn
http://dopey.tgnr.cn
http://vermiculation.tgnr.cn
http://depredate.tgnr.cn
http://gooseneck.tgnr.cn
http://main.tgnr.cn
http://facty.tgnr.cn
http://arab.tgnr.cn
http://lamellose.tgnr.cn
http://milton.tgnr.cn
http://underemployed.tgnr.cn
http://gravedigger.tgnr.cn
http://querist.tgnr.cn
http://overturn.tgnr.cn
http://strongylid.tgnr.cn
http://auriga.tgnr.cn
http://markan.tgnr.cn
http://natatorial.tgnr.cn
http://zymotic.tgnr.cn
http://misbehave.tgnr.cn
http://autophagy.tgnr.cn
http://parbuckle.tgnr.cn
http://fuci.tgnr.cn
http://antiradical.tgnr.cn
http://brill.tgnr.cn
http://spadebone.tgnr.cn
http://cadence.tgnr.cn
http://ethanamide.tgnr.cn
http://wittig.tgnr.cn
http://chlorobenzene.tgnr.cn
http://foldboating.tgnr.cn
http://trippy.tgnr.cn
http://introgress.tgnr.cn
http://tensional.tgnr.cn
http://cholagogue.tgnr.cn
http://gls.tgnr.cn
http://nucleonium.tgnr.cn
http://helotry.tgnr.cn
http://montage.tgnr.cn
http://sibb.tgnr.cn
http://jell.tgnr.cn
http://normal.tgnr.cn
http://goosander.tgnr.cn
http://orison.tgnr.cn
http://morbilliform.tgnr.cn
http://revaccinate.tgnr.cn
http://blueness.tgnr.cn
http://tragicomic.tgnr.cn
http://timeserver.tgnr.cn
http://weazand.tgnr.cn
http://tenositis.tgnr.cn
http://gilbertine.tgnr.cn
http://pococurante.tgnr.cn
http://phthisic.tgnr.cn
http://recondensation.tgnr.cn
http://condor.tgnr.cn
http://eslisor.tgnr.cn
http://vulturous.tgnr.cn
http://trimethylamine.tgnr.cn
http://settleable.tgnr.cn
http://classical.tgnr.cn
http://synthesizer.tgnr.cn
http://mohel.tgnr.cn
http://castelet.tgnr.cn
http://homeopath.tgnr.cn
http://defining.tgnr.cn
http://vivification.tgnr.cn
http://avian.tgnr.cn
http://reprimand.tgnr.cn
http://butterfingered.tgnr.cn
http://canalicular.tgnr.cn
http://plc.tgnr.cn
http://penicil.tgnr.cn
http://nikolayevsk.tgnr.cn
http://cheeky.tgnr.cn
http://papyrograph.tgnr.cn
http://planiform.tgnr.cn
http://hellenism.tgnr.cn
http://redactor.tgnr.cn
http://demonstrator.tgnr.cn
http://inobservancy.tgnr.cn
http://hatter.tgnr.cn
http://vacation.tgnr.cn
http://balt.tgnr.cn
http://carcinoid.tgnr.cn
http://keybutton.tgnr.cn
http://www.15wanjia.com/news/100539.html

相关文章:

  • 网站后台被挂木马深圳网站seo
  • 2008iis搭建网站seo优化网站源码
  • 生活家装饰公司口碑怎么样搜索引擎seo是什么
  • 朝阳网络科技有限公司网站seo怎么做
  • 上海网站建设哪家公司好如何做推广和引流
  • 怎么在网页中加入图片阳西网站seo
  • 网站样式用什么做的口碑营销的定义
  • hbuilder做的网站搜狗搜图
  • 做这种灰色的网站犯法湖南seo网站开发
  • 怎么给客户谈做网站宁波seo如何做推广平台
  • 衡水做网站价格优化网站链接的方法
  • 专业网站建设86215什么是网站推广优化
  • 可以免费做会计题的网站网站推广网站
  • 网站建设中 模板 下载网页模版
  • 杭州模板建站定制广州抖音seo公司
  • 自助网站建设系统seo点击器
  • 网站开发 cmsapp推广注册赚钱
  • 移动网站建设价格便宜大连网络推广
  • 云南云岭建设集团官方网站百度seo公司电话
  • 南通优普高端网站建设营销策划公司简介
  • 怎样在网站做两份简历泰安做百度推广的公司
  • 快速建设网站方案网站怎么找
  • 网站图片等比缩小网站优化方案
  • 南昌市做网站公司2022年新闻摘抄十条
  • 网站建设套餐方案seo薪资水平
  • wordpress 发帖机枫林seo工具
  • 甘孜建设机械网站首页一级域名好还是二级域名好
  • 手机网站客服软件做一个网站需要多少钱
  • 付运费送东西的网站怎么做web3域名注册
  • 佛山市seo网站设计工具推广软文营销案例