当前位置: 云顶2322mg > 云顶2322的app下载 > 正文

拖拽异步上传达成,HTML5完毕显示器手势解锁【云

时间:2019-10-02 11:49来源:云顶2322的app下载
即采用了 https 也不用通过 query strings 传敏感数据 2017/10/16 · 基础手艺 ·HTTPS 本文由 伯乐在线 -xiaoheike翻译,艾凌风云顶2322的app下载,校稿。未经许可,幸免转发! 土耳其共和国(The

即采用了 https 也不用通过 query strings 传敏感数据

2017/10/16 · 基础手艺 · HTTPS

本文由 伯乐在线 - xiaoheike 翻译,艾凌风云顶2322的app下载, 校稿。未经许可,幸免转发!
土耳其共和国(The Republic of Turkey)语出处:HttpWatch。款待参预翻译组。

劳动器端的 log 将公开记下完整 url;浏览器上的寻访历史也会当面记下完整 url;Referrer headers 里也忠实记下总体 url,然后在别人家的 谷歌Analytics 上出示。

我们平常听到的三个宽广难题是:“URL 中的参数是或不是能够安全地传递到安全网址?”那些难题平常现身在客商看了 HttpWatch 捕获的 HTTPS 央浼后,想通晓还会有哪个人能够看看这一个数量。

 

举例说,假诺在一个查询中,使用如下安全的 URL 传递密码字符串:

HttpWatch 能够展现安全央浼的内容,因为它与浏览器集成,因而它亦可在 HTTPS 请求的 SSL 连接对数据加密以前查看数据。云顶2322mg 1

借使你使用网络嗅探器查看,比如 Network Monitor云顶2322mg,,对于同三个呼吁,你只可以够查阅加密其后的多少。在数码包追踪中尚无可知的网站,标题或内容:

云顶2322mg 2

你能够信任 HTTPS 央求是平安的,只要:

  • 未忽略任何SSL证书警告
  • Web 服务器用于运转 SSL 连接的私钥在 Web 服务器自己之外不可用。

之所以,在网络范围,URL 参数是安全的,可是还会有一部分任何依照 URL云顶2322备用网址, 泄漏数据的点子:

  1. URL 存款和储蓄在 Web 服务器日志中–平时各样乞请的欧洲经济共同体 URL 都被存放在在服务器日志中。这表示 URL 中的任何敏感数据(比方密码)会以公开形式保留在服务器上。以下是行使查询字符串通过 HTTPS 发送密码时存款和储蓄在 httpwatch.com 服务器日志中的条款: **二〇〇九-02-20 10:18:27 W3SVC4326 WWW 208.101.31.210 GET /Default.htm password=mypassword 443 … 日常以为就是是在服务器上,积累明文密码一向都不是好主张 2.URLs are stored in the browser history – browsers save URL parameters in their history even if the secure pages themselves are not cached. Here’s the IE history displaying the URL parameter:
  2. URL 存款和储蓄在浏览器历史记录中–就算安全网页本人未缓存,浏览器也会将 URL 参数保存在其历史记录中。以下是 IE 的历史记录,显示了 URL 的伸手参数:云顶2322mg 3

若是顾客创设书签,查询字符串参数也将被存放。

  1. URLReferrer 必要头中被传送–如果三个安然还是网页使用能源,举例 javascript,图片或许分析服务,URL 将通过 Referrer 诉求头传递到每一个放置对象。不时,查询字符串参数恐怕被传送并存放在第三方站点。在 HttpWatch 中,你能够看到大家的密码字符串正被发送到 Google Analytics云顶2322mg 4

结论

缓慢解决那些难点必要两步:

  • 唯有在相对少不了的情事下传递敏感数据。一旦客商被注解,最佳使用全体有限生命周期的会话 ID 来标志它们。

应用会话层级的 cookies 传递新闻的优点是:

  • 它们不会蕴藏在浏览器历史记录中或磁盘上
  • 它们通常不存款和储蓄在服务器日志中
  • 它们不会传递到嵌入式能源,比方图片或 JavaScript
  • 它们仅适用于诉求它们的域和路线

以下是大家的在线商号中,用于识别客户的 ASP.NET 会话 cookie 示例:

云顶2322mg 5

请注意,cookie 被限制在域 store.httpwatch.com,並且在浏览器会话甘休时过期(即不会积攒到磁盘)。

你当然能够经过 HTTPS 传递查询字符串,可是不用在只怕出现安全难题的情景下行使。比如,你能够安全的行使它们呈现部分数字依然项目,像 accountview 或者 printpage,然则并不是使用它们传递密码,信用卡号码恐怕别的不该公开的新闻。

1 赞 收藏 评论

HTML5贯彻荧屏手势解锁

2015/07/18 · HTML5 · 1 评论 · 手势解锁

原稿出处: AlloyTeam   

效用显示

云顶2322mg 6

兑现原理 利用HTML5的canvas,将解锁的范畴划出,利用touch事件解锁那么些规模,直接看代码。

JavaScript

function createCircle() {// 创建解锁点的坐标,根据canvas的高低来平均分配半径 var n = chooseType;// 画出n*n的矩阵 lastPoint = []; arr = []; restPoint = []; r = ctx.canvas.width / (2 + 4 * n);// 公式计算 半径和canvas的分寸有关 for (var i = 0 ; i < n ; i++) { for (var j = 0 ; j < n ; j++) { arr.push({ x: j * 4 * r + 3 * r, y: i * 4 * r + 3 * r }); restPoint.push({ x: j * 4 * r + 3 * r, y: i * 4 * r + 3 * r }); } } //return arr; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function createCircle() {// 创建解锁点的坐标,根据canvas的大小来平均分配半径
 
        var n = chooseType;// 画出n*n的矩阵
        lastPoint = [];
        arr = [];
        restPoint = [];
        r = ctx.canvas.width / (2 + 4 * n);// 公式计算 半径和canvas的大小有关
        for (var i = 0 ; i < n ; i++) {
            for (var j = 0 ; j < n ; j++) {
                arr.push({
                    x: j * 4 * r + 3 * r,
                    y: i * 4 * r + 3 * r
                });
                restPoint.push({
                    x: j * 4 * r + 3 * r,
                    y: i * 4 * r + 3 * r
                });
            }
        }
        //return arr;
    }

canvas里的圆形画好之后能够张开事件绑定

JavaScript

function bindEvent() { can.addEventListener("touchstart", function (e) { var po = getPosition(e); console.log(po); for (var i = 0 ; i < arr.length ; i++) { if (Math.abs(po.x - arr[i].x) < r && Math.abs(po.y - arr[i].y) < r) { // 用来剖断初始点是还是不是在规模内部 touchFlag = true; drawPoint(arr[i].x,arr[i].y); lastPoint.push(arr[i]); restPoint.splice(i,1); break; } } }, false); can.addEventListener("touchmove", function (e) { if (touchFlag) { update(getPosition(e)); } }, false); can.addEventListener("touchend", function (e) { if (touchFlag) { touchFlag = false; storePass(lastPoint); setTimeout(function(){ init(); }, 300); } }, false); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function bindEvent() {
        can.addEventListener("touchstart", function (e) {
             var po = getPosition(e);
             console.log(po);
             for (var i = 0 ; i < arr.length ; i++) {
                if (Math.abs(po.x - arr[i].x) < r && Math.abs(po.y - arr[i].y) < r) { // 用来判断起始点是否在圈圈内部
 
                    touchFlag = true;
                    drawPoint(arr[i].x,arr[i].y);
                    lastPoint.push(arr[i]);
                    restPoint.splice(i,1);
                    break;
                }
             }
         }, false);
         can.addEventListener("touchmove", function (e) {
            if (touchFlag) {
                update(getPosition(e));
            }
         }, false);
         can.addEventListener("touchend", function (e) {
             if (touchFlag) {
                 touchFlag = false;
                 storePass(lastPoint);
                 setTimeout(function(){
 
                    init();
                }, 300);
             }
 
         }, false);
    }

跟着到了最器重的手续绘制解锁路线逻辑,通过touchmove事件的每每触发,调用canvas的moveTo方法和lineTo方法来画出折现,同一时等候法庭判果断是不是到达大家所画的层面里面,在那之中lastPoint保存不易的范围路线,restPoint保存全体范围去除准确路径之后剩余的。 Update方法:

JavaScript

function update(po) {// 宗旨转移格局在touchmove时候调用 ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); for (var i = 0 ; i < arr.length ; i++) { // 每帧先把面板画出来 drawCle(arr[i].x, arr[i].y); } drawPoint(lastPoint);// 每帧花轨迹 drawLine(po , lastPoint);// 每帧画圆心 for (var i = 0 ; i < restPoint.length ; i++) { if (Math.abs(po.x - restPoint[i].x) < r && Math.abs(po.y - restPoint[i].y) < r) { drawPoint(restPoint[i].x, restPoint[i].y); lastPoint.push(restPoint[i]); restPoint.splice(i, 1); break; } } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function update(po) {// 核心变换方法在touchmove时候调用
        ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
 
        for (var i = 0 ; i < arr.length ; i++) { // 每帧先把面板画出来
            drawCle(arr[i].x, arr[i].y);
        }
 
        drawPoint(lastPoint);// 每帧花轨迹
        drawLine(po , lastPoint);// 每帧画圆心
 
        for (var i = 0 ; i < restPoint.length ; i++) {
            if (Math.abs(po.x - restPoint[i].x) < r && Math.abs(po.y - restPoint[i].y) < r) {
                drawPoint(restPoint[i].x, restPoint[i].y);
                lastPoint.push(restPoint[i]);
                restPoint.splice(i, 1);
                break;
            }
        }
 
    }

终极正是停止专门的学业,把路子里面包车型大巴lastPoint保存的数组形成密码存在localstorage里面,之后就用来拍卖解锁验证逻辑了

JavaScript

function storePass(psw) {// touchend结束未来对密码和状态的拍卖 if (pswObj.step == 1) { if (checkPass(pswObj.fpassword, psw)) { pswObj.step = 2; pswObj.spassword = psw; document.getElementById('title').innerHTML = '密码保存成功'; drawStatusPoint('#拖拽异步上传达成,HTML5完毕显示器手势解锁【云顶2322mg】。2CFF26'); window.localStorage.setItem('passwordx', JSON.stringify(pswObj.spassword)); window.localStorage.setItem('chooseType', chooseType); } else { document.getElementById('title').innerHTML = '四遍不雷同,重新输入'; drawStatusPoint('red'); delete pswObj.step; } } else if (pswObj.step == 2) { if (checkPass(pswObj.spassword, psw)) { document.getElementById('title').innerHTML = '解锁成功'; drawStatusPoint('#2CFF26'); } else { drawStatusPoint('red'); document.getElementById('title').innerHTML = '解锁失利'; } } else { pswObj.step = 1; pswObj.fpassword = psw; document.getElementById('title').innerHTML = '再一次输入'; } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function storePass(psw) {// touchend结束之后对密码和状态的处理
        if (pswObj.step == 1) {
            if (checkPass(pswObj.fpassword, psw)) {
                pswObj.step = 2;
                pswObj.spassword = psw;
                document.getElementById('title').innerHTML = '密码保存成功';
                drawStatusPoint('#2CFF26');
                window.localStorage.setItem('passwordx', JSON.stringify(pswObj.spassword));
                window.localStorage.setItem('chooseType', chooseType);
            } else {
                document.getElementById('title').innerHTML = '两次不一致,重新输入';
                drawStatusPoint('red');
                delete pswObj.step;
            }
        } else if (pswObj.step == 2) {
            if (checkPass(pswObj.spassword, psw)) {
                document.getElementById('title').innerHTML = '解锁成功';
                drawStatusPoint('#2CFF26');
            } else {
                drawStatusPoint('red');
                document.getElementById('title').innerHTML = '解锁失败';
            }
        } else {
            pswObj.step = 1;
            pswObj.fpassword = psw;
            document.getElementById('title').innerHTML = '再次输入';
        }
 
    }

解锁组件

将以此HTML5解锁写成了贰个零件,放在

二维码体验: 云顶2322mg 7

 

仿效资料:

1 赞 4 收藏 1 评论

云顶2322mg 8

幸免改动 sw 的 UEnclaveL

在 sw 中那样做是“最差实施”,要在原地方上修改 sw。

举个例证来证实为啥:

  1. index.html 注册了 sw-v1.js 作为 sw
  2. sw-v1.js 对 index.html 做了缓存,也正是缓存优先(offline-first)
  3. 您更新了 index.html 重新挂号了在新鸿基土地资金财产点的 sw sw-v2.js

只要您像上边那么做,客商永久也拿不到 sw-v2.js,因为 index.html 在 sw-v1.js 缓存中,那样的话,假如你想翻新为 sw-v2.js,还须要更换原本的 sw-v1.js。

File小说——拖拽上传前传

2015/07/24 · HTML5 · 拖拽上传

原稿出处: 百码山庄   

在《File杂谈——初识file控件》一文中,我们早就对file控件有了初叶的打听,並且对创设三个视觉和经验一致的file控件做了比较详细的证实,明日我们连续探听file控件的越多特点,并延伸出更多。

事件

  • onload :文件成功读完时触发
  • onloadend :文件读完时触发,无论成功与否
  • onloadstart :初叶读取文件时接触
  • onprogress :文件读取中,常用来获取读取进程
  • onabort :文件读取操作停顿
  • onerror :文件读取出错

关于小编:xiaoheike

云顶2322mg 9

简要介绍还没赶趟写 :) 个人主页 · 笔者的文章 · 10 ·      

云顶2322mg 10

Service Worker

service worker 在作者眼里,类似于一个跑在浏览器后台的线程,页面第贰遍加载的时候会加载那些线程,在线程激活之后,通过对 fetch 事件,能够对各个收获的能源开展支配缓存等。

file控件的身份受到威胁

趁着files属性的产出,file控件的地点显然赢得了很好的升高,可是那并不代表它的身份进一步巩固。随着HTML5二来的,并不仅仅file控件的files属性。大家已经得以在更扩大的网址上得以看来拖拽上传这些多少个新式并且更切合顾客作为的并行作用。这里笔者先不说拖拽上传功效的达成,大家先一齐来看看另一种获得FileList对象的措施。

第一,大家需求贰个拖拽上传的静态分界面,细节相当少说,直接上代码:

XHTML

<style> * {margin: 0;padding: 0;} .up-area {margin: 50px auto;border: 1px dashed #ccc;background-color: #eee;width: 600px;height: 400px;line-height: 400px;text-align: center;color: #666;cursor: pointer;} .up-area:hover {background-color: #ddd;} </style> <input type="file" name="" id="J_UploadFile" style="display: none;"> <div class="up-area" id="J_UploadArea"> 点击这里或拖入文件举办上传 </div> <script> (function(){ var area = document.getElementById("J_UploadArea"), file = document.getElementById("J_UploadFile"); function uploadFile(fs) { console.log(fs); } area.onclick = function() { console.log('click'); file.click(); }; file.onchange = function() { uploadFile(this.files); }; area.ondragenter = function(ev) { this.className = 'up-area hover'; ev.preventDefault(); }; area.ondragover = function(ev) { ev.preventDefault(); }; area.ondrop = function(ev) { ev.preventDefault(); console.log('drop'); var dt = ev.dataTransfer; this.className = 'up-area'; uploadFile(dt.files); }; })(); </script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<style>
    * {margin: 0;padding: 0;}
    .up-area {margin: 50px auto;border: 1px dashed #ccc;background-color: #eee;width: 600px;height: 400px;line-height: 400px;text-align: center;color: #666;cursor: pointer;}
    .up-area:hover {background-color: #ddd;}
</style>
<input type="file" name="" id="J_UploadFile" style="display: none;">
<div class="up-area" id="J_UploadArea">
    点击此处或拖入文件进行上传
</div>
<script>
(function(){
    var area = document.getElementById("J_UploadArea"),
        file = document.getElementById("J_UploadFile");
    function uploadFile(fs) {
        console.log(fs);
    }
    area.onclick = function() {
        console.log('click');
        file.click();
    };
    file.onchange = function() {
        uploadFile(this.files);
    };
    area.ondragenter = function(ev) {
        this.className = 'up-area hover';
        ev.preventDefault();
    };
    area.ondragover = function(ev) {
        ev.preventDefault();
    };
    area.ondrop = function(ev) {
        ev.preventDefault();
        console.log('drop');
        var dt = ev.dataTransfer;
        this.className = 'up-area';
        uploadFile(dt.files);
    };
})();
</script>

在线Demo。将文件拖入深橙区域释放便得以在页面上观望文件音信。

留神的恋人或然早已开掘了,其实大家那边又提供了优化file控件的另外一种方法——完全使用另一个标签代替,在该标签的click事件中积极触发file控件的click事件,正如上面代码中的: file.click() 。然则,那不是本文的要害。

大家精心看上边代码中的最终一段,即ondrop的事件管理函数,我们的files对象并非发源file控件,而是一个叫dataTransfer的东西。那么大家是或不是能够大胆的猜想,拖拽上传功效其实能够完全抛开file控件独立达成?这里先留个悬念,大家随后再谈谈。

在地点的案例中大家经过点击来接纳文件进而获取FileList对象,和透过将文件拖拽到石榴红区域来博取FileList对象,那二种方法虽分歧,但我们得到的数量确是大同小异的,那足以阐明file控件不再独裁,它的身价已经日渐开头面前碰到恐吓。

1 赞 1 收藏 评论

云顶2322mg 11

演示表明

点击区域接纳文件或直接将文件拖入区域,触发文件上传效能,文件将异步发送到服务器。待服务端管理实现后回去基本新闻,在页面中显得。由于服务器容积问题,本示例未做文件保留管理,只是简短的将文件核心消息重临,文件上传的后端具体管理逻辑须要活动补充。

别的难点

到前天得了,已经基本上可以兑现 service worker 离线缓存应用的效劳了,可是还大概有如故存在部分主题素材:

增产属性

在HTML5到来在此之前,绝大大多情形下利用file控件,大家前端程序猿须要的有用消息都只可以通过value属性得到的文本名字符串来收获(比方:文件类型、文件的直白名称等),那几个非常不便利,多文件上传的时候就更是辛勤了。其余,大家想不通过其余花招得到上传文件的轻重缓急更是一种奢望。

不过,幸而这一体并不曾那么糟,随着HTML5的过来,file控件上新添了files属性。该属性满含了file控件选取的文书对象集结,各个文件对象包含了脚下文件的主干音信(类型、名称、大小)等,这样一来大家再也不用利用正则啊,字符串拆分啊,等等麻烦的艺术去获得大家想要的新闻了。上面咱们在Chrome的支配台看下files属性的布局。笔者的测量试验方法是那般的:

首先,使用Chrome浏览器随便张开贰个网页,然后F12调出开辟工具,接着在Console中输入:

JavaScript

document.body.innerHTML = '<input type="file" id="J_File">'; var f = document.getElementById('J_File'); f.onchange = function() { console.log(this.files); };

1
2
3
4
5
document.body.innerHTML = '<input type="file" id="J_File">';
var f = document.getElementById('J_File');
f.onchange = function() {
    console.log(this.files);
};

此时页面会被替换来三个file控件,点击选用三个或八个(三个要求在input标签上加码multiple属性)当三步跳件,那时change事件将会被触发,调控台将会输出一下数据:

云顶2322mg 12

生硬,files属性的值是一个FileList类型的指标,它和数组类似,同样有所length属性,并且我们也能够直接使用循环去获得每二个文书(File)对象(例:取第四个公文正是files[0])。大家承袭看种种文件对象中含有的音信,我们常用的name、size、type等宏观了,忽然以为好高大上。

可是,笔者要告知我们的是,我们也不能够明目张胆的利用file控件的files属性,因为它在IE9及以下版本的IE浏览器中是空中楼阁的,大家供给接纳别的的花招(flash等)来弥补那些主题素材,这里就不进行了。

属性

  • result :读取到的文本内容,当读取操作完毕后生效
  • readyState :File里德r对象的最近气象
  • error :出错开上下班时间的错误新闻

PWA 特性

PWA 不是单独的某项技能,而是一群技巧的联谊,譬喻:ServiceWorker,manifest 加多到桌面,push、notification api 等。

而就在这几天时间,IOS 11.3 刚刚帮助 Service worker 和接近 manifest 增多到桌面包车型地铁特征,所以此次 PWA 改造首要依然完结这两有个别机能,至于其余的天性,等 iphone 支持了再进级吗。

二个美妙的艺术sendAsBinary

前面大家聊起的施用FormData来完成文件异步上传,在高级浏览器中都能健康运营,未有太大难点。接下来大家另外二个在Firefox达成异步上传的秘技。这些情势,大家又会提交一个新的朋友——FireReader。FileReader是HTML5新扩张的一个指标,它能够访谈客商当麻芋果件,而且能够以分歧格式读取文件内容。

编辑:云顶2322的app下载 本文来源:拖拽异步上传达成,HTML5完毕显示器手势解锁【云

关键词:

  • 上一篇:没有了
  • 下一篇:没有了