限制错误次数,设计基于HTML5的APP登录功效及康宁调用接口的不二法门

by admin on 2019年3月16日

bf88必发唯一官网 1

 

1.概述

前段时间喜欢用python去抓一些页面玩,但都大致都以用get请求一些页面,再通过正则去过滤。

image

登录 保存密码 安全 加密
近期意识群内大伙对用Hbuilder做的APP怎么做登录功用以及保险登录景况十分纳闷,而我前一段时间正好稍微切磋了须臾间,所以把自己掌握的告诉大家,节约我们找找资料的光阴。

1.1.用途

向集成客户端提供查询数据和登录服务。
比方财富须求授权才能查看和利用,请首先阅读“5.登录验证”小节。

今天试了一下,模拟登六位网站。发现也相比简单。读懂本文供给对http协议和http会话有自然的敞亮。

在院子里面来看了叁个没人用的路由器(ws860s),看起来像个黑科技(science and technology)的玩具,就想着进去看看,到底有怎么着好玩的。看到后头的竹签上有web界面包车型客车地点,然后登陆进去看看,发现有密码,然后小编想,路由器的密码应该都以能够reset的,然后本身就用笔戳那些reset键,神跡没有爆发,原来这么些reset键坏了。

你是还是不是确实供给登录成效?
把这些标题放在最前面并不是灌水,而是真的见过很多并不必要登录的APP去做了登录效用,或许是并不必要强制登录的APP把登录作为运营页。
用户对您的APP一窍不通,你就要求对方注册并报到,除非APP本人已经很有信誉或许是用户有强须求,不然平常人应有会直接把它删掉。
相比较温柔的艺术是将一些并不须求登录,但足以给用户带来支持的事物,第近期间展现给他们,让他们产生兴趣,再在适合的火候教导他们注册(比如动用必要选拔更尖端的机能,或用户须求收藏有个别喜欢的音讯时)。

1.2.通讯研商

客户端和服务器通过HTTP协议通讯,客户端应用HTTP
Get向服务器发送请求,服务器再次回到json格式的业务数据或操作结果给客户端。

注明:因为模仿登陆的是本人的民用网站,所以以下代码对个体网站和账号密码做了拍卖。

bf88必发唯一官网 2

报到和挂号要充足不难
那是微小手提式有线电话机端,用再好的输入法,打字也是不便利的,所以别把登录页设计得须求填很多东西。假若有恐怕的话,只填手提式有线电电话机号,让用户接受短信验证码就做到注册是可是但是的了。想获取越来越多音信?想想大商店的APP是怎么做的,他们会告知用户,今后的个人资料完善程度是三成,如若想博得越来越多积分,你须要填完。
tips:固然您想昭示在Appstore并且同时涵盖注册效用,那么注册页面必须做二个用户许可协议的链接,不然有恐怕通不过审核。

1.3.接口请求

接口地址是一个HTTP协议的url地址,具体格式是:

ip替换来实际服务器的ip或域名,假若端口不是暗中认可端口,必要把端口加上。
token是表明字符串,在登录接口中获取,即使没有登录则省略。
别的情节参见接口的概念。
当UKugaL请求参数值中含有U科雷傲L地址保留字符时,应对参数值进行U途锐L编码。
切切实实参见“奥迪Q7FC2396: Uniform Resource Identifiers (URI): Generic
Syntax”。
当呼吁参数蕴涵普通话字符时,应对普通话字符接纳UTF-8编码。

网站分析

image

兑现登录后的session有两种办法?
APP当浏览器用,直接载入远程页面

1.4.回来音讯结构

回去的json音讯数据结构具有从严的一致性,客户端能够运用同一的吸收接纳和剖析方法处理回来音信。
简单易行新闻
简言之的回来新闻包蕴对请求的处理结果,结构如下:

{
    "code":0,
    "err_desc":""
}

其中:
code 为0象征处理成功,别的值表示处理失败。
err_desc是对不当的描述,在code为0时err_desc会被不难。
独特情状,在用户认证的login1和login2接口中,err_desc具有特种用途用法,具体参见接口描述。除那三个接口之外,err_desc都代表错误描述。
带业务数据的音讯
一对再次回到音讯除了含有处理结果消息,还隐含业务数据记录集,结构如下:

 {
        "code":0,
        "data":{
            "count":1,
            "items":[...]
        }
    }

其中:
data 业务数据的根节点:
count 业务数据的条数,可能的值为0 ~ n
items
业务数据,是三个数组,数据条数由count属性定义。当count为0时,items属性也许为null可能不设有。
本文书档案后续章节中,在讲述items成分的习性时,会简单一些属性的讲述,即事实上调用接口重回的本性在本文书档案中恐怕会没有描述,这种情形下请直接忽略被忽略描述的属性值。本文书档案中描述的性质是实际上再次回到内容的七个子集,没有描述到的剧情对集花费系统绝非影响。
带分页数据的新闻
如果回到数据较多,服务器会对回到的多寡进行分页,客户端能够依据页码请求内定范围的数量。带分页新闻的回来数据结构如下:

    {
    "code":0,
    "data":{
        "page":1,
        "page_size":"20",
        "pages":"1",
        "total":"2",
        "count":2,
        "items":[...]
                }
}

分页数据音讯在data成分下,意义如下:
page 当前页码
page_size 每页数据记录条数
pages 总共的页数
total 总数据条数
count 当前回来页的多少条数
限制错误次数,设计基于HTML5的APP登录功效及康宁调用接口的不二法门。假定回到的数据带有分页音信,则足以在调用接口时选择page参数来呼吁钦赐页码的数码。

爬虫的必备第1步,分析指标网站。那里运用谷歌(Google)浏览器的开发者者工具分析。

bf88必发唯一官网 3

那种情景是累累偷懒的程序员或然傻X的业主选取的艺术,因为做起来实在太快。假若本身网站是响应式布局,那么很有大概不须要做什么样变动,就假如在开发时打起头页就好了,那样Hybird的APP外壳就纯粹成为了二个浏览器。
但比起那样做带来的诸多通病来,开发进程快的亮点差不离能够忽略不计。
首先,在互连网环境倒霉时,纯大白页,用户体验0;
然后,CSS和JS等能源不在本地,须求中距离载入,假设选拔了bootstrap之类的框架,那用户为了开一下APP而消耗的流量真是令人感动;
再然后,网页里常用的jquery,在堂弟大的webview里速度并不佳好,而一旦是非ajax的网页那就更闹心了,每一次操作都要跳转和页面渲染,要令人把它当成APP那其实是嘲谑。
再再然后,那样的所谓APP,要经过Appstore的稽审,那是空想的(除非审核员当天闹肚子严重,拿着纸巾奔向厕所前误点了经过……),苹果的渴求是,那得是APP,而不可能是有个别网站做成APP的样板,那样的景况适合做Web
APP。而据作者所知,国内几个较大的Android市场,那样的APP也是心有余而力不足透过审核的。

1.5.参考

[1] RFC 2616, Hypertext Transfer Protocol — HTTP/1.1[S].
[2] RFC 3986, Uniform Resource Identifier (URI): Generic
Syntax[S].
[3] Introducing JSON

透过登陆抓取,看到那般一个伸手。

image

调用后端接口

2.查询分类

上边部分为请求头,下边部分为呼吁是传的参数。由图片能够看来,页面通过表单提交了八个参数。分别为_csrf,usermane,password。

剖析进程

那是个很好的时期,因为无论后端你是用Java、PHP,如故node.js,都足以透过xml、json来和APP通信。遥想当年写服务端要本人写包结构,然后为了化解出现难题还折腾了五个月IOCP模型,真心觉得今后太甜蜜了。
把刚刚不行用APP当浏览器使的案例的装有缺点反过来看,便是那般做的长处,在优化完善的情景下体验接近原生,而且通信流量极少,通过各类审批也是妥妥的。
tips:通过plus对象中的XMLHttpRequest来Get、Post远程的后端接口,大概利用Mui中封装好的AJAX相关函数。

2.1.查询分类

  • 用途
    询问CMS上的分类信息。
    请求

    parent 上级分类编号。即使马虎,会回来一级分类列表。
    假如要询问一流分类,请去掉parent参数。

  • 响应

{
    "code": 0,
    "data": {
        "count": 2,
        "items": [
            {
                "id": 1,
                "name": "公共栏目",
                "comment": "",
                "upper_catalog_id": 0
            },
            {
                "id": 2,
                "name": "私有栏目",
                "comment": "",
                "upper_catalog_id": 0
            }
        ]
    }
}

id 编号
name 名称
comment 备注
“upper_catalog_id 上级分类编号, 0 表示近年来分类是一级分类。

其间csrf是为着避防万一跨域脚本伪造。原理一点也不细略,便是每便呼吁,服务器生成一串加密字符串。放在隐藏的input表单中。再一回呼吁的时候,把这几个字符串一起传过去,为了验证是或不是为同八个用户的伸手。

抓包

插一段代码,小编把mui的ajax又做了更为的包装,对过期举行了自行重试,而对invalid_token等情事也做相应处理:

2.2.查询分类树

  • 用途
    查询全体分类及其下属分类。
    请求

  • 响应

{
    "code": 0,
    "data": {
        "count": 2,
        "items": [
            {
                "id": 1,
                "name": "公共栏目",
                "comment": "",
                "upper_catalog_id": 0,
                "sub_items": [
                                {
                                    "id": 5,
                                    "name": "二级分类1",
                                    "comment": "",
                                    "upper_catalog_id": 1
                                },
                                ...
                    ]
            },
            ...
        ]
    }
}

id 编号
name 名称
comment 备注
“upper_catalog_id 上级分类编号, 0 表示近日分门别类是顶级分类。
sub_items 下级分类数组,包蕴 0 或七个下级分类。

bf88必发唯一官网 4

一 、打开路由的web页面:192.168.3.1,路由器重回

mui.web_query = function(func_url, params, onSuccess, onError,
retry){
    var onSuccess = arguments[2]?arguments[限制错误次数,设计基于HTML5的APP登录功效及康宁调用接口的不二法门。2]:function(){};
    var onError = arguments[3]?arguments[3]:function(){};
    var retry = arguments[4]?arguments[4]:3;
    func_url = ‘’ + func_url;
    mui.ajax(func_url, {
        data:params,
        dataType:’json’,
        type:’post’,
        timeout:3000,
        success:function(data){
            if(data.err === ‘ok’){
                onSuccess(data);
            }
            else{
                onError(data.code);
            }
        },
        error:function(xhr,type,errorThrown){
            retry–;
            if(retry > 0) return mui.web_query(func_url, params,
onSuccess, onError, retry);
            onError(‘FAILED_NETWORK’);
        }
    })
};
var onError = function(errcode){
    switch(errcode){
    case ‘FAILED_NETWORK’:
        mui.toast(‘网络不好’);
        break;
    case ‘INVALID_TOKEN’:
        wv_login.show();
        break;
    default:
        console.log(errcode);
    }
};
var params = {per:10, pageno:coms_current_pageno};
mui.web_query(‘get_bf88必发唯一官网,com_list’, params, onSuccess, onError, 3);
调用后端接口怎么着才安然?
在APP中保存登录数据,每回调用接口时传输

3.查询媒体能源

由此,大家的代码逻辑就有了。首先请求三回登录页面。然后分析页面,得到csrf字符串。最终把那么些字符串和账号密码一起传给服务器用来报到。

bf88必发唯一官网 5

程序员总能给自身找到偷懒的办法,有的程序为了方便,会在用户登录后,间接把用户名和密码保存在该地,然后每一回调用后端接口时作为参数字传送递。真省事儿啊!可这种方法简便就好像拿着一兜子钱在半路边走边喊“快来抢小编啊!快来抢作者啊!”,一个纤维的嗅探器就能把用户的密码得到手,即使用户习惯在具备地点用二个密码,那么你闯大祸了,黑客通过撞库的方法能把用户的持有音信一锅端。

3.1.查询媒体能源

  • 用途
    查询媒体能源。
    能够查询有些编号的财富的新闻,也能够查询有些分类下的享有财富音信。
    请求

    parent
    分类编号,假设要询问某些分类下的持有能源,请忽略下一个参数。
    media_id
    能源编号,若是给出该参数,则只询问号码为media_id的三个能源的新闻,并忽略parent参数。

  • 响应

{
    "code": 0,
    "data": {
        "page": 1,
        "page_size": "20",
        "pages": 9,
        "total": "18",
        "count": 2,
        "items": [
            {
                "id": 79,
                "catalog_id": 2,
                "title": "vod - 8898",
                "sub_title": "G3视频",
                "abstract": null,
                "text": null,
                "resource_type": "vod",
                "cover": "/mserver/cms/covers/res_cover_79.jpg?1515729601",
                "duration": 98,
                "add_time": "2018-01-08 19:19:26",
                "view_times": 0,
                "open_status": 0
            },
            ...
        ]
    }
}

重返0个或五个财富消息。
id 财富编号
catalog_id 所属分类编号
title 标题
sub_title 小标题
abstract 摘要描述
text 描述
resource_type vod或live
cover 封面地址
duration 播放时间长度
add_time 添加时间
view_times 观望次数
open_status 开放情形

首先份代码

image

签到时央浼叁次token,之后用token调用接口

4.询问播放地址

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

import requests
import re

# 头部信息
headers = {
 'Host':"localhost",
 'Accept-Language':"zh-CN,zh;q=0.8",
 'Accept-Encoding':"gzip, deflate",
 'Content-Type':"application/x-www-form-urlencoded",
 'Connection':"keep-alive",
 'Referer':"http://localhost/login",
 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
}

# 登陆方法
def login(url,csrf):
 data = {
 "_csrf" : csrf,
 "username": "xiedj",
 "password": "***"
 }

 response = requests.post(url, data=data, headers=headers)
 return response.content


# 第一次访问获取csrf值
def get_login_web(url):
 page = requests.get('http://localhost/login')
 reg = r'<meta name="csrf-token" content="(.+)">'
 csrf = re.findall(reg,page.content)[0]
 login_page = login(url,csrf)
 print login_page


if __name__ == "__main__":
 url = "http://localhost/login/checklogin"
 get_login_web(url)

bf88必发唯一官网 6

那是比较安全的措施,用户在签到时,APP调用获取token的接口(比如),用post将用户名和密码的摘要传递给服务器,然后服务器比对数据库中的用户音信,匹配则赶回绑定该用户的token(这相似翻译为令牌,很直观的名字,一看就掌握是有了那玩意儿,就会对您放行),而数据库中,在用户的token表中也还要插入了这一个token相关的数量:这些token属于哪个人?那么些token的有效期是多短时间?这些token当前报到的ip地址是?这些token对应的deviceid是?……
诸如此类就算token被精心截获,也不会造成太大的商洛风险。因为从没用户名和密码,然后假若黑客通过那么些token伪造用户请求,大家在劳务器端接口被调用时就能够对发起呼吁的ip地址、user-agent之类的消息作比对,以防备伪造。再然后,假若token的有效期设得小,过会儿它就超时了,除非黑客能够穿梭截获你的token,不然她不得不干瞪眼。(插一句题外话:看到此间,是或不是明白怎么不推荐在外场随便接入来历不明的wifi热点了?)
tips:token怎样变迁?
能够依照用户的音讯及部分无限制音信(比如时间戳)再通过hash编码(比如md五 、sha1等)生成唯一的编码。
tips:token的安全级别,取决于你的莫过于需要,所以假诺不是涉及财产安全的天地,并不提出太严酷(比如用户走着走着,3G换了个基站,闪断了一下IP地址变了,尼玛token过期了,这就属于为了不供给的平安丢了用户体验,当然借使变换的IP地址跨省的话依旧应该证雀巢(Beingmate)下的,想想QQ有时候会让填验证码就知晓了)。
tips:接口在回到新闻时,能够涵盖此次请求的状态,比如成功调用,那么result[‘status’]想必就是’success’,而反之则是’error’,而一旦是’error’,则result[‘errcode’]中就能够包涵错误的来头,比如errcode中是’invalid_token’就足以告诉APP那一个token过期或无效,这时APP应弹出登录框也许用本地存款和储蓄的用户名或密码再度恳请token(用户选用“记住密码”,就应当在地头保存用户名和密码的摘要,方法见plus.storage的文档)。

4.1.询问播放地址

  • 用途
    询问有个别媒体财富的播报地址。
    请求

    media_id 财富编号。
    protocol
    播出协议,点播能源能够是hls,http-flv或http-mp3;直播能源得以是
    rtmp或hls。若是简单,重回全数协议的地方。
    客户端请根据终端类别选拔合适的热播协议:
    android、ios或别的辅助H5的浏览器,能够选拔:hls, http-mp5协议
    PC选用http-flv或rtmp协议

  • 响应

{
    "code": 0,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 104,
                "resource_id": 39,
                "web_url": "/mp4/vod/yellowstone/yellowstone.mp4",
                "web_io_protocol": "http-mp4",
                "add_time": "2017-08-25 16:35:16"
            }
        ]
    }
}

再次来到0个或八个广播地址,叁个财富大概有多少个不一样协商的广播地址。
resource_id 能源编号
web_url 播出地址
“web_io_protocol 播出协议

代码看起来好像一贯不什么样难点。但是执行的时候出错了。核对了弹指间,错误的原委是,csrf验证退步!

image

再插点代码,基于plus.storage的用户音信类,注意:供给在plusReady之后再利用。

5.登录验证

再反复认可得到的csrf和央浼登录的csrf字符串没难题了后来,作者想开了叁个题材。
假设,我们还不亮堂不当原因来说,那里能够暂停思考1个难点。“服务器怎样知道,第三回呼吁获取csrf和第三回post登录请求是同3个用户?”

会赢得csrf和cookie和所急需的值,这一个值都要保留下来,前面会用。

;function UserInfo(){
};

概述

  • 1)登录的须求和意义
    客户端应当首选判断服务器是或不是要求必须登录。假诺须要,则应首先调用登录接口登录,然后再请求别的接口。
    是不是需求强制登录,跟运行须求有关,网站运转者能够经过管住平台安装那么些选项。
    假定没有强制供给,客户端能够登录,也能够不登陆。
    用户正确登录后,会取得二个token值,在继续的接口中,应当将该token值带入。例如:

  • 2)登录的流程
    服务器和客户端通过“挑衅->应答”格局(challenge-response)进行身份认证交互,在那几个进度中,客户端须求调用四回接口向服务器表明身份。认证进度中不须要传递密码,密码用于签名验证。
    身价验证的过如下:
    1)客户端应用“用户名”作为参数调用“login1”接口,向服务器发出身份认证请求
    1.1)服务器确认用户是还是不是是有效的用户:
    1.2)若不是,则不做越来越处理,重临错误音讯
    1.3)要是,服务器发生一个“随机数(挑衅字符串)”发送给客户端
    2)客户端选取“用户密码”和“随机数(挑战字符串)”作为输入,按约定的算法生成二个hash值,用该hash值作为
    调用“login2”接口的参数,请求login2接口。
    2.1)服务器用收到的hash值与协调的测算结果比较,若双方相同,则通过验证;不然,认证退步
    2.2)若声明通过,服务器重返“token”给客户端,否者重回错误音信。

到那,应该都知晓了,借使要登录成功,须求化解什么让服务相信三次呼吁是同2个用户。这里须求动用http会话(不晓得的能够活动百度,那里差不多介绍)。

二 、输入用户名密码后:

//清除登录音信
UserInfo.clear = function(){
    plus.storage.removeItem(‘username’);
    plus.storage.removeItem(‘password’);
    plus.storage.removeItem(‘token’);
}

5.1.断定是还是不是必须登录

  • 用途
    认清是或不是须要必须登录。
    若是供给必须登录,则要求首先登场录,否者查询数据的接口会回到没有权力的荒唐。

请求

  • 响应

{
    "code": 0,
    "err_desc": "no"
}

err_desc 属性描述了对登录的渴求。no 代表不强制须要, yes
代表必须必要登录。

http协议是二个种无状态的磋商。为了使那种无状态变得有状态,由此引进了对话。简而言之,通过session去记录那一个景况。当二个用户率先次呼吁web服务的时候,服务器会变卦2个session,用于保存那么些用户的新闻。同时,在回到给用户端时,把这么些sessionID保存在cookies里。当用户再贰回呼吁的时候,浏览器会把那一个cookies带上。因而在劳务器端就能掌握多次请求是还是不是为同2个用户。

bf88必发唯一官网 7

//检查是还是不是带有自动登录的信息
UserInfo.auto_login = function(){
    var username = UserInfo.username();
    var pwd = UserInfo.password();
    if(!username || !pwd){
        return false;
    }
    return true;
}

5.2.login1

  • 用途
    提交表明申请,接口重回挑衅字符串。
    请求

    username 登录用户名。

  • 响应

{
    "code": 0,
    "data": {
        "count": 1,
        "items": [
            {
                "id": 37,
                "chcode": "9luqgrnj5vvszmjw"
            }
        ]
    }
}

id session识别号,用于login2接口,原样传递给login2即可。
chcode
挑战字符串,客户端按预订规则使用该字符串生成1个hash值,然后调用login2接口。

据此大家的代码,须求在率先次呼吁的时候获得那一个sessionID。第②回呼吁的时候把那么些sessionID一起传过去。而requests厉害的地点正是,一句简单requests.Session(),就能应用这么些会话对象。

image

//检查是不是已登录
UserInfo.has_login = function(){
    var username = UserInfo.username();
    var pwd = UserInfo.password();
    var token = UserInfo.token();
    if(!username || !pwd || !token){
        return false;
    }
    return true;
};

5.3.login2

  • 用途
    利用login1再次来到的chcode计算出二个hash值,提交给本接口申请到三个token。该token值用于其余接口的表达。
    请求

    id login1接口回来的id值,原样带入。
    hash 依据约定总结出的hash值。算法:
    hash=md5(md5(password)+chcode)
    讲述:首先总结出密码的hash值,然后在变更的密码hash值底部拼接上挑衅字符串形成新的字符串,最终总结这一个新字符串的hash值。
    hash算法选择md5算法,生成的摘要选取16进制编码,编码生成的字符采取小写字母。
    例如,字符串111111的hash值是 96e79218965eb72c92a549dd5a330112

  • 响应

{
    "code": 0,
    "data": {
        "count": 6,
        "items": [{
            "id": 2,
            "name": "王工",
            "sex": 1,
            "logo": null,
            "token": "c9xpghlmgxn58kdq",
            "group_id": 1
        }]
    }
}

name 用户名
sex 性别,1男 0女
logo 用户头像,null也许头像url
token
认证令牌,在无法保全session的景况下,在伸手别的接口中应有将token参数带入
group_id 用户所属的用户组

第一份代码

bf88必发唯一官网 8

UserInfo.username = function(){
    if(arguments.length == 0){
        return plus.storage.getItem(‘username’);
    }
    if(arguments[0] === ”){
        plus.storage.removeItem(‘username’);
        return;
    }
    plus.storage.setItem(‘username’, arguments[0]);
};

5.4.logout

  • 用途
    退出登录,退出应用前请尽量调用该接口。
    请求

    =abcdefg
    token 登录接口中赢得的token

  • 响应

{
    "code": 0,
}
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

import requests
import re

# 头部信息
headers = {
 'Host':"localhost",
 'Accept-Language':"zh-CN,zh;q=0.8",
 'Accept-Encoding':"gzip, deflate",
 'Content-Type':"application/x-www-form-urlencoded",
 'Connection':"keep-alive",
 'Referer':"http://localhost/login",
 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
}

# 登陆方法
def login(url,csrf,r_session):
 data = {
 "_csrf" : csrf,
 "username": "xiedj",
 "password": "***"
 }

 response = r_session.post(url, data=data, headers=headers)
 return response.content


# 第一次访问获取csrf值
def get_login_web(url):
 r_session = requests.Session()
 page = r_session.get('http://localhost/login')
 reg = r'<meta name="csrf-token" content="(.+)">'
 csrf = re.findall(reg,page.content)[0]


 login_page = login(url,csrf,r_session)
 print login_page


if __name__ == "__main__":
 url = "http://localhost/login/checklogin"
 get_login_web(url)

image

UserInfo.password = function(){
    if(arguments.length == 0){
        return plus.storage.getItem(‘password’);
    }
    if(arguments[0] === ”){
        plus.storage.removeItem(‘password’);
        return;
    }
    plus.storage.setItem(‘password’, arguments[0]);
};

成功收获登陆后的页面

bf88必发唯一官网 9

UserInfo.token = function(){
    if(arguments.length == 0){
        return plus.storage.getItem(‘token’);
    }
    if(arguments[0] === ”){
        plus.storage.removeItem(‘token’);
        return;
    }
    plus.storage.setItem(‘token’, arguments[0]);
};
如此那般当用户运行APP或行使了亟待报到才能应用的法力时,就足以采纳UserInfo.has_login()来判断是还是不是业已报到,倘诺已登录,则采用UserInfo.token()来收获到token数据,作为参数调用远程的后端接口。

bf88必发唯一官网 10

image

if(UserInfo.has_login()){
    //打开须求出示给用户的页面,或然是调用远端接口
}
else{
    wv_login.show(‘slide-in-up’);   //从底层向上海滑稽剧团出登录页面
}
在登录页面中,用户输入了用户名和密码后,并点击了”登录“按钮,我们下一步做怎么样?再插段代码(注意:此处使用的是自家刚刚代码中增添的web_query函数,你也足以一向运用mui的ajax):

由代码能够知晓,requests.Session()运行会话对象后,第贰回呼吁会活动把上三回的sessionID一起传过去。

bf88必发唯一官网 11

function get_pwd_hash(pwd){
    var salt = ‘hbuilder’; 
//此处的salt是为着防止黑客撞库,而在md5以前对最初的小说做一定的变形,能够设为自个儿喜爱的,只要和服务器验证时的salt一致即可。
    return md5(salt + pwd);
//此处假如你已经引用了md5相关的库,比如github上的JavaScript-MD5
}

以上正是本文的全体内容,希望对大家的学习抱有扶助,也目的在于大家多多扶助脚本之家。

image

//那里假如你曾经经过DOM操作获取到了用户名和密码,分别保存在username和password变量中。
var username = xxx;
var password = xxx;
var pwd_hash = get_pwd_hash(password);

您只怕感兴趣的稿子:

  • python模拟腾讯网今日头条登陆功效(天涯论坛腾讯网爬虫)
  • python使用paramiko模块达成ssh远程登陆上传文件并推行
  • Python爬虫利用cookie实现模拟登陆实例详解
  • python3.3课程之模拟百度登陆代码分享
  • python完毕带验证码网站的自行登陆完成代码
  • python完成十二线程暴力破解登陆路由器功用代码分享
  • Python达成SSH远程登陆,并执行命令的格局(分享)
  • python完毕的登陆Discuz!论坛通用代码分享
  • python模拟登陆Ali妈妈生成商品推广链接
  • python达成登陆博客园获得个人珍藏并保留为word文件

叁 、路由器再次来到数据

var onSuccess = function(data){
    UserInfo.username(username);
    UserInfo.password(pwd_hash);
    UserInfo.token(data.token); //把获取到的token保存到storage中
    var wc = plus.webview.currentWebview();
    wc.hide(‘slide-out-bottom’);   
//此处假若是隐藏登录页回到在此以前的页面,实际你也能够干点儿其余
}

bf88必发唯一官网 12

var onError = function(errcode){
    switch(errcode){
    case ‘INCORRECT_PASSWORD’:
        mui.toast(‘密码不科学’);
        break;
    case ‘USER_NOT_EXISTS’:
        mui.toast(‘用户并未注册’);
        break;
    }
}

image

mui.web_query(‘get_token’, {username:username,password:pwd_hash},
onSuccess, onError, 3);
更安全一点,获取token通过SSL

密码的变化方法

刚刚的章程,机智一点儿的读者差不离会心存疑虑:那获取token时不依旧得驾驭传输一次密码吗?
是的,你可以将以此获得token的地点,用SSL来保卫安全(比如),那样黑客便是截了包,暂且半会儿也解不出什么新闻。
SSL证书的取得渠道很多,笔者信任您总有方法查到,所以不赘述了。可是话说namecheap上的SSL证书比godaddy的要惠及得多……(那是吐槽)
tips:前段时间OpenSSL漏洞让很多服务器遭殃,所以一旦自个儿搭服务器,一定记得装补丁。
tips:能够把富有接口都弄成SSL的吗?能够。但会拖慢服务器,假诺是布局并不自信的VPS,建议不折腾。

从上边抓包的结果来看,Password字段是经过加密的,所以一旦大家要Python暴力破解,须要把那一个password的扭转算法找出来。

还要更更安全(那题目真方便)

开拓web登录页面,查看源代码,找找算法

还记得刚才APP向服务器请求token时,能够进入的用户信息呢?比如用户的设施deviceid。
比方大家在调用接口时,还捎带二个当下日子戳参数timestamp,同时,用deviceid和这几个小时戳再生成一个参数sign,比如
md5(deviceid timestamp
token)那样的款型。而服务端首先验证一下参数中的时间戳与当下服务器时间是不是一致(误差保持在合理限定内即可,比如6分钟),然后依照用户保存在服务器中的deviceid来对参数中的时间戳进行同样的变形,验证是还是不是匹配,那便自然“更更安全”了。
tips:要是对总体调用请求中的参数进行排序,再以deviceid和timestamp加上排序后的参数来对全部调用生成3个sign,黑客就是截获sign,差别的时间点、参数请求所采纳的sign也是例外的,难以伪造,自然会更安全。当然,写起来也更麻烦。
tips:驾驭了规律,整个验证进程是足以依照自个儿的急需改造的。

bf88必发唯一官网 13

image

bf88必发唯一官网 14

image

bf88必发唯一官网 15

image

bf88必发唯一官网 16

image

bf88必发唯一官网 17

image

在linux上改动ip地址,很简短一条命令就足以缓解:

bf88必发唯一官网 18

image

[password:bbbbbbbb];{“errorCategory”:”user_pass_err”,”csrf_param”:”FcnG919l8J7XhQsOYQEMS3WhsC2liSX”,”count”:2,”csrf_token”:”IQ/LfSZSx7gTp6VflYnZelobNSpoMy2″}

ip地址被限定,须要等待1分钟的提示:

[password:aaaaaaaa];{“errorCategory”:”Three_time_err”,”csrf_param”:”VKGTylVILQA9SFsTyYdpkHv8qfJPIIw”,”count”:3,”csrf_token”:”MTQLBcWQN+1DJjAP+A6xC4AUSXciBod”}

签到成功的提醒:

****[password:xxxxxxxx];{“csrf_param”:”H/DyWxogz7+2y4UfzhqddowkjH1uL04″,”csrf_token”:”MorgBb0+PNpoE8KhwBwq4OoioD2NcCs”,”errorCategory”:”ok”,”level”:2,”IsWizard”:true,”IsFirst”:true}

流程

bf88必发唯一官网 19

image

具有的数量都准备好了,下一步,就是起始应用Python写程序了。

核心Python代码:

bf88必发唯一官网 20

image

bf88必发唯一官网 21

image

bf88必发唯一官网 22

image

bf88必发唯一官网 23

image

bf88必发唯一官网 24

image

bf88必发唯一官网 25

image

bf88必发唯一官网 26

image

bf88必发唯一官网 27

image

bf88必发唯一官网 28

image

bf88必发唯一官网 29

image

bf88必发唯一官网 30

image

bf88必发唯一官网 31

image

bf88必发唯一官网 32

image

bf88必发唯一官网 33

image

bf88必发唯一官网 34

image

怎么防备暴力破解?

bf88必发唯一官网 35

image

bf88必发唯一官网 36

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图