微信朋友圈“空”消息的H5模拟

昨天和大家简单介绍了微信朋友圈空信息的原因后,不少朋友都在问如果在H5中出现这个问题怎么办,或者如果这样回来带什么问题,于是就有了本篇文章。

注意本篇文章为“硬核”内容,云层一本正经的写代码。

为了方便这里首先先把HTML代码放出

<!DOCTYPE html><html lang="cn"><head> <meta charset="UTF-8"> <title>WX朋友圈信息BUG原理演示</title></head><body><script> function checkinput() { if(window.name == "") { document.getElementById("message").value=""; window.name="modify"; } var1=document.getElementById("message").value; if(var1.trim().length==0) document.getElementById("button").disabled=true; else document.getElementById("button").disabled=false; }</script><form id="form1" action="/api" method="POST" > <input type="button" id="button" value="发表" style="font-size: 30px;left: 30px;top: 0;"><br> <textarea cols="40" rows="5" id="message" name="message" onkeypress="checkinput()">这一刻的想法...</textarea> </form></body></html>

将这个代码保存为html后缀文件,用浏览器打开即可看到下面的效果

接着试试点击文本框,然后删掉所有内容(发表按钮变灰)

接着添加两个空格,会发现按钮发表还是灰色,如果添加别的内容就能看到按钮正常使用。

接着解释一下代码及工作原理

基于onkeyup的事件触发,调用checkinput函数

<textarea cols="40" rows="5" id="message" name="message" onkeypress="checkinput()">这一刻的想法...</textarea>

点击文本框输入内容先清空默认提示信息,为了避免再次输入的时候继续清空,所以修改了window.name的值。

if(window.name == "") { document.getElementById("message").value=""; window.name="modify";        }

获取文本框的值,然后去空格检查长度是否是零,如果是零则让按钮不可用,否则让按钮可用。

var1=document.getElementById("message").value; if(var1.trim().length==0)          document.getElementById("button").disabled=true; else          document.getElementById("button").disabled=false; }

好了基本代码这里写完了,这里对关键几个知识点做个说明

//如何确保页面第一次打开,window.name属性第一次打开页面为空window.name == ""//如何通过js获取一个文本框的值,这里需要文本框有ID属性document.getElementById("message").value//如何修改一个按钮为灰色不可用document.getElementById("button").disabled=true//如何判断一个文本框内容是否为空,trim()函数去空格,length拿字符串长度var1.trim().length==0

代码到这里,是不是就出现了不能提交空内容的情况了!

介绍下常见的浏览器客户端的两个小办法

A.和微信的朋友圈问题类似,不触发checkinput()函数

按F12打开Chrome浏览器开发工具,在下面的Console内输入代码

document.getElementById("message").value=""

然后敲下回车

接着你就会发现文本框的内容为空了,而按钮仍然可以使用。同理还可以通过这个命令模式直接把按钮的灰色改成可用。

B.不管按钮状态直接触发表单提交

大家会说直接发请求是不是就行了,这是一种方法,但是如果涉及到协议加密或者有特殊令牌就麻烦了,所以这里仍然基于表单提交的方式来做。

直接调用表单提交即可。

所以这里再次强调一下所有客户端的内容都是不可靠的哪怕你做了JS混淆也可以通过Eval()函数执行,所以服务器端的校验是非常重要的,当然同样就算是服务器返回的内容也要做校验,避免被注入。

很多注入都是基于客户端及服务器端的校验方式及时序问题,所以小问题虽小,产生的影响会可能很大。

备注

文本没有使用框架,是为了让大家更好的知道原理,如果使用Vue或者Jquery类的框架,道理雷同。

TestOps|测试运维

精益流程 赋能技术

(0)

相关推荐

  • JavaScriptBOM - open/sub和sup

      window的open方法  window.open(); 参数: 1.要加载的url 2.窗口的名称或者窗口的目标 3.设置窗口大小的语句 举个小例子: 我们这有个按钮,当我们来调用这个按钮,来 ...

  • 微信朋友圈消息提醒 短信和邮件接收新动态

    之前自己在某交友平台注册了个会员,大致流程就是交完费后加个私人客服,有妹子想约男生的时候,客服会在朋友圈里发个动态,索取联系方式就是在该条朋友圈下报名,无论初级会员还是神马的高端的,拼的就是手速,谁先 ...

  • 怎样设置微信朋友圈封面

    现在国内几乎已经人手一个微信APP了,不过有部分朋友还是不了解关于微信朋友圈封面如何设置的问题,下面就让小编来做个简单的示范,感兴趣的朋友不妨来看看吧. 1.登陆手机微信的个人账户后,单击页面底部[发 ...

  • 今天才知道微信朋友圈有7种发表方式,太实用了,你知道几种?

    今天才知道微信朋友圈有7种发表方式,太实用了,你知道几种?

  • 思念好难, 等待好苦, 微信朋友圈唯美句子

    思念只是人生的忧伤,再见也是人生的彷徨,孤独的眼睛,让我学会独自受伤,再见的风华,失落的情怀,你的世界,我看不见最后的晴朗. 流浪的思念,爱情的奔跑,一个人的爱情,两个人的再也不见,所有的祝福,只是一 ...

  • 微信朋友圈伤感语录,心情说说

    伤感的心,藏着人生的悲哀,再见的情,分手人生的读懂,错过的唯一,再见人海的梦,分手一个人的世界,再见爱情的唯一,孤独的错,错过你的情眼,唯一的眼泪,唯一的分手,孤独的爱情,还是那么的不堪一击,柔情的思 ...

  • 微信朋友圈唯美句子,古风句子

    人海栀子花,情缘灯花楼,一束梨花,三纸情殇,问今生缘起缘灭,看来世斜风细雨,多少年,恩情散,多少梦,此时再见,三生三生,一世柔情,人海人海,再见无涯,系别人生,纸上眉弯,人海错过,此生难忘,情断肠,花 ...

  • 微信朋友圈励志语录,人生感悟正能量

    无奈的情,伤感的脆弱,人生总是一幅画,一份相约渡,是再见,是遥远,也是命运的安慰,一种人生感动,一种灵魂的牵绊. 在内心,在世界,在人生的桥头,总是一份善良,一份相信,一份遥远,一份再见. 安静的我, ...

  • 微信朋友圈情感语录,人生感悟

    一个人的眼泪,眼里沧桑多少的无奈,只是孤独不言语,只是悲伤不演讲,多少的情,多少的懂,只是缘散了. 一句否定,一句伤感,一个人生错过,爱情分手,人生再见,爱情流浪,属于的情眼,孤独的再见,偶然相逢,错 ...

  • 微信朋友圈励志语录,经典句子

    时间是人生的嫁衣,也是美丽的外套,别给别人无奈,别给自己失落. 失败的人,看不清未来,无奈的人,看不见最后的感动,人是容易坠落的,心是容易孤独的,错过就是一辈子,失落一生很难站起来. 岁月,站在人生的 ...