前言
由于网站注册入口容易被黑客攻击,存在如下安全问题:
- 暴力破解密码,造成用户信息泄露
- 短信盗刷的安全问题,影响业务及导致用户投诉
- 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 东方航空PC 注册入口
简介:中国东方航空股份有限公司总部位于上海,是中国三大国有骨干航空公司之一,前身可追溯到1957年1月原民航上海管理处成立的第一支飞行中队,在上海、香港挂牌上市。
东航运营近800架飞机组成的现代化机队,是全球最年轻的机队之—,拥有中国规模最大、商业和技术模式领先的互联网宽体机队,在中国民航首家开放手机等便携式设备使用。“东方万里行”常旅客可享受联盟多家航空公司的会员权益及全球超过750间机场贵宾室。每年能为1.5亿人次提供航空出行服务,位居全球前十。
二、 安全性分析报告:
采用极验的V2版本,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。
三、 测试方法:
前端界面分析, 采用的是极验2.0,最大特点就是将图片做分割后,在前端再做合并,这就好办了, 网上有大量现成的逆向文章及视频参考,不过我们这次不用逆向, 只是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分。
- 模拟器交互部分
public RetEntity send(WebDriver driver, String areaCode, String phone) {
try {
RetEntity retEntity = new RetEntity();
driver.get(smsUrl);
By phoneBy = By.xpath("//input[@placeholder='请输入手机号码']");
WebElement phoneElemet = driver.findElement(phoneBy);
phoneElemet.sendKeys(phone);
driver.findElement(By.className("global-login-sendcode")).click();
Thread.sleep(1000);
boolean moveResult = geetApi.getAndMove(driver, 6);
Thread.sleep(500);
WebElement msgElement = ChromeDriverManager.waitElement(driver, By.className("global-login-sendcode-active"), 10);
String msg = (msgElement != null) ? msgElement.getText() : null;
if (moveResult && msg != null && msg.contains("s")) {
retEntity.setRet(0);
retEntity.setMsg(msg);
} else {
System.out.println("moveResult=" + moveResult + ",msg=" + msg);
}
return retEntity;
} catch (Exception e) {
System.out.println(e.toString());
return null;
}
}
- 获取滑动图片及调用移动交互
public boolean getAndMove(WebDriver driver, Integer offSet) {
int distance = -1;
try {
WebElement moveElement = ChromeDriverManager.waitElement(driver, By.className("geetest_slider_button"), 1000);
if (moveElement == null) {
logger.error("getAndMove() moveElement=" + moveElement);
return false;
}
// 下面的js代码根据canvas文档说明而来
// 完整背景图geetest_canvas_fullbg geetest_fade geetest_absolute
StringBuffer base64 = new StringBuffer();
String fullName = "geetest_canvas_fullbg geetest_fade geetest_absolute";
byte[] fullImg = GetImage.callJsByName(driver, fullName, base64);
String bgName = "geetest_canvas_bg geetest_absolute";
byte[] bgImg = GetImage.callJsByName(driver, bgName, base64);
File fullFile = null, bgFile = null;
if (fullImg != null && bgImg != null) {
Long time = System.currentTimeMillis();
fullFile = new File(dataPath + "geet/" + time + "full.png");
FileUtils.writeByteArrayToFile(fullFile, fullImg);
bgFile = new File(dataPath + "geet/" + time + "bg.png");
FileUtils.writeByteArrayToFile(bgFile, bgImg);
if (fullImg.length < 10000) {
System.out.println("fullImg len=" + fullImg.length + " -> err[len<10000]");
return false;
}
}
// 获取滑动距离并删除图片
distance = (fullFile != null && bgFile != null) ? ActionMove.getMoveDistance(fullFile.getAbsolutePath(), bgFile.getAbsolutePath())
标签:String,fullImg,driver,geetest,安全,注册,msg,东方航空,null
From: https://blog.csdn.net/weixin_44549063/article/details/139810415