1、异步加载和延迟加载。
异步加载:
1、async。
2、动态加入script标签。(script Dom element)w3c规定其为异步加载。
var s = document.createElement("script");
s.type = text/javascript;
s.async = true;
缺点:在其执行完以前阻塞onload执行
3、onload时异步加载。
将上述代码包在一个函数里,
var async_load = function(){
var s = document.createElement("script");
s.type = text/javascript;
s.async = true;
}
if(wndow.attachment){
window.attachment("onload",async_load);
}else{
window.addEventListener("load",async_load,false);
}
这种方法只是把插入script的方法放在一个函数里面,然后放在window的onload方法里面执行,这样就解决了阻塞onload事件触发的问题。
注:DOMContentLoaded与load的区别。前者是在document已经解析完成,页面中的dom元素可用,但是页面中的图片,视频,音频等资源未加载完,作用同jQuery中的ready事件;后者的区别在于页面所有资源全部加载完毕。??????????????????
window.attachment是为一个事件指派多个过程。但有的浏览器不支持该方法,但支持window.addEventListener,且二者功能一样,区别是指派的事件不同,前者需要在事件前加上on,后者没有on,后者还有第三个参数。
4、创建iframe标签。
延迟加载:defer。setTimeOut。
2、前端安全问题。
1、资源枚举。
1、找东西。文件命名比较传统,会导致攻击者遍历文件名获取信息。解决:重要的文件命一些私密的名。
2、猜东西。网站不想让来访者知道所用的语言和后台信息,但是后台错误提示有待完善,会导致来访者输入一个错误的信息,页面提示会出现后台的信息。
2、参数操纵。
客户端:1、xss攻击:重点是跨域,客户端执行。分三种。
a、基于反射的:比如给qq好友群发一个链接,一旦点开会获取他的信息。
b、基于Dom或本地的:比如连接免费wifi时,提供免费wifi的网关(从一个网连接到另一个网的关口)会在用户访问的每个界面上恶意添加一段脚本。
c、基于存储的:比如把一段恶意脚本植入博客里,一旦来访者看到博客,即被窃取信息。
解决:谨慎处理客户端返回的信息。
2、会话劫持:http会话并不安全,通过tcp建立连接传输数据,传输的数据每个字节插入一个32位序列号(递增)组成来确保可靠性,攻击者可以通过嗅探的方式获取客户端和服务器端通信的报文信息,如果能猜到序列号,就可以断开二者会话,将自己伪装成合法用户控制后续的会话。
解决:使序列号无序化。
服务器端:1、SQL注入:(SQL作用就是查询数据库)攻击者在搜索框输入SQL语句,如果服务端不对输入内容进行处理而是直接执行,则攻击者就可以随意操作数据库。
2、XPath注入。同SQL注入,不过其数据库是XML形式。
3、cgi命令执行。访问cgi脚本时,攻击者通过提交恶意参数让服务器执行相关的操作。
解决:对提交参数的过滤。
3、其他攻击:
a、CSRF。跨域请求伪造。利用用户信任的网站进行攻击,在用户访问某安全网站并且cookie没过期的时候,向用户发送一个访问安全网站的请求,比如向用户发送一个邮件,可以是个图片,可以使得用户在看到的时候就进行相关的操作,从而利用用户的cookie访问安全网站进而进行相关的操作。
解决:1、每次有重要请求时都要重新请求验证用户的身份。2、设置一个唯一的令牌(token),存在于服务端的session和用户的cookie时,对任何请求都检查二者是否一致。
b、钓鱼攻击。指的是网站的伪造。比如taObao.com,在里边进行xss的攻击。
c、拒绝服务。通过向服务器发送洪水一样的请求,从而导致服务器超负荷运行而停止。
注:验证码的作用:
防止对用户进行暴力破解,用程序一个一个尝试可能的密码组合,即使尝试成功了,再输入验证码时,程序也会很难以识别验证码的字体,为安全增加了一道防线。
验证码通常难以识别,目的是防止机器轻松的识别。