确定
取消
×
仅自己可见
《我要夏天》
1

别怕晒的黑
看起来很健康
泳池旁的妹
笑起来很阳光
对你Say个Hey
出水芙蓉加甩头
你是哪位
管他天多黑
反正还有月光
(0) (0)
今天是大厨
weed
此人很懒,什么也没写...
(0) (1)
基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击
淩度奢望

攻击原理:    CFS攻击(Cross Frame Script(跨框架脚本)攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码中加入scirpt,监视、盗取用户输入。    Clickjacking(点击劫持) 则是是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。    CFS 和 Clickjacking其实都是基于网页iframe产生的攻击。当没有预防的时候,攻击者可以利用iframe的方式包含你的网页,采用欺骗的方式,引导用户过来点击,利用监听盗取用户输入信息或者是利用样式控制或者骗取用户点击某个特定的区域,而达到获取劫持的目的。防止被 FRAME 加载你的网站页面1. meta 标签:很多时候没有效果,无视<meta http-equiv="Windows-Target" contect="_top"> 2. js 判断顶层窗口跳转,可轻易破解,意义不大function locationTop(){ if (top.location != self.location) { top.location = self.location; return false; } return true;}locationTop();破解:// 顶层窗口中放入代码var location = document.location;// 或者 var location = ""; 【像淘宝前端页面用的js:if (top.location != self.location){        top.location = self.location;    }】3. header 控制,绝大部分浏览器支持网站Sitemap的一些规则 使用 X-Frame-Options 有三个可选的值:DENY:浏览器拒绝当前页面加载任何Frame页面SAMEORIGIN:frame页面的地址只能为同源域名下的页面ALLOW-FROM:允许frame加载的页面地址PHP代码:header('X-Frame-Options:Deny');Nginx配置:add_header X-Frame-Options SAMEORIGINApache配置:Header always append X-Frame-Options SAMEORIGIN具体参见:https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header注明:如果是针对 安全扫描 appscan 或者CFCA认证 用的webinspect 这些工具的话扫出来的 Cross_Frame SCRIPT之类的high级别的安全问题,用第三条解决是可以过扫描的。如果不是过工具扫描,上述三中方案都是可行的。在java中加入header deny方法如下(spring mvc,其他框架大同小异)  @RequestMapping("/login")    public String login(HttpServletRequest request,HttpServletResponse response) {        HttpSession session = request.getSession();         session.invalidate();        response.addHeader("x-frame-options","DENY");        return "login";    }之所以扫描工具不认前端js跳出frame也是有道理的,毕竟破前端js难度不大

https://blog.csdn.net/zp522123428/article/details/42295031  

(0) (0)
【Java】运算符优先级口诀:单目算术位关系,逻辑三目后赋值。
淩度奢望
运算符优先级口诀:单目算术位关系,逻辑三目后赋值。
单目:++、--
算术:+、-、*、/、%
位:位移运算符:<<、>>、>>>
关系:<、>、<=、>=、==
========================
逻辑:&&、||、!、&、|、^
三目:三目运算符(又称为三元运算符)A>B? x:y
后:凑字数用的。。
赋值:=
(0) (0)
Websocket原理
淩度奢望
4

一、websocket与http

WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)

首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解

有交集,但是并不是全部。

另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。=

再简单来说,层级不一样。

二、Websocket是什么样的协议,具体有什么优点

首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。

HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。

(0) (0)
通过UrlConnection调用Webservice服务
淩度奢望
package com.wang.webservice.service;    import javax.jws.WebService;  import javax.xml.ws.Endpoint;    @WebService  public class HelloService {            public String sayHello( String name ){          System.out.println(name);          return "hello " + name;      }            public static void main(String[] args) {          Endpoint.publish("http://127.0.0.1:1234/helloservice", new HelloService());      }        }

编写客户端代码: 

package com.wang.webservice.urlconnection;    import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;  import java.net.HttpURLConnection;  import java.net.MalformedURLException;  import java.net.URL;    /*  * 通过UrlConnection调用Webservice服务  */  public class App {            public static void main(String[] args) {          URL wsUrl = null;          try {                            wsUrl = new URL("http://127.0.0.1:1234/helloservice");              HttpURLConnection conn = (HttpURLConnection) wsUrl.openConnection();                            conn.setDoInput(true);              conn.setDoOutput(true);              conn.setRequestMethod("POST");              conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");                            OutputStream os = conn.getOutputStream();                            //请求体              String soap = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:q0=\"http://service.webservice.wang.com/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"                          + "<soapenv:Body><q0:sayHello><arg0>tom</arg0></q0:sayHello></soapenv:Body></soapenv:Envelope>";                            os.write(soap.getBytes());                            InputStream is = conn.getInputStream();                            byte[] b = new byte[1024];              int len = 0;              String s = "";              while( (len = is.read(b))!=-1 ){                                    String ss = new String(b,0,len,"UTF-8");                  s += ss;              }                            //返回的是拦截中的返回体;              System.out.println(s);                            is.close();              os.close();              conn.disconnect();                        } catch (MalformedURLException e) {              System.out.println("创建URL失败");              e.printStackTrace();          } catch (IOException e) {              System.out.println("URL打开失败");              e.printStackTrace();          }                }        }

 

(0) (0)
win10 2分钟进入黑屏解决方案
淩度奢望

1.运行注册表管理器,win+r ,输入regedit.exe2.定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca03.修改attributes的值为24.进入高级电源设置,在睡眠选项中会出现“无人参与系统睡眠超时”,将默认的2分钟修改成你想要的时间。

(0) (0)
【Java】Java中的String,StringBuilder,StringBuffer三者的区别
淩度奢望

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

  1. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

  String最慢的原因:

  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:

 

1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);

 

  如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

  而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

  另外,有时候我们会这样对字符串进行赋值

(0) (0)
【JAVA】内部类
淩度奢望
1
此人很懒,什么也没写...
(0) (0)
【JS】自动转换布尔值的转换规则
淩度奢望
var a="undefined", b="false", c="null", d="",e="0";var f=undefined,g=false,h=null,i=0;function assert(x) {    if (x) {        console.log("true");    }    else{        console.log("false");    }}console.log(assert(a));//trueconsole.log(assert(b));//trueconsole.log(assert(c));//trueconsole.log(assert(d));//falseconsole.log(assert(e));//trueconsole.log(assert(f));//falseconsole.log(assert(g));//falseconsole.log(assert(h));//falseconsole.log(assert(i));//falseconsole.log(assert(j));//false

if(condition)的condition求值结果若非布尔值,ECMAScript会自动调用Boolean()转换函数将结果转换为布尔值。转换规则为:

数据类型转换为true转换为false
booleantruefalse
String任何非空字符串空字符串
Number任何非零数字值0和NaN
Object任何对象null
Undefinedn/aundefined
(0) (0)
【网络】主机域名
淩度奢望
1
此人很懒,什么也没写...
(0) (0)
【网络】IP协议服务类型
淩度奢望

IP由IP协议控制传输的协议单元称为IP数据报。IP协议屏蔽下层各种物理网络的差异,向上层(主要是TCP层或UDP层)提供统一的IP数据报。作为一种互联网协议,运行于网络层,屏蔽各个物理网络的细节和差异,为其高层用户提供如下3种服务:1. 不可靠的数据投递服务。数据报的投递没有任何品质保证,数据报可能被正确投递,也可能被丢弃;2. 面向无连接的传输服务。这种方式不管数据报的传输经过哪些结点,甚至可以不管数据报起始和终止的计算机。数据报的传输可能经过不同的传输路径,而且这些数据报在传输过程中有可能丢失,也有可能正确传输到目的结点;3. 尽最大努力投递服务。IP不会随意丢包,除非系统的资源耗尽、接收出现错误、或者网路出现故障的情况下,才不得不丢弃报文。  

(0) (0)
我要过英语六级
weed
此人很懒,什么也没写...
(0) (1)
js操作referrer获取来源页
淩度奢望

http请求中有一个referer报文头,用来表示当前流量的来源参考页,即当前页面是从哪个页面跳转过来的,可以通过document.referrer来获取该信息,但会有一些原因,导致js获取到的referrer是空字符串,如下:1、使用window.location跳转,会导致IE下返回空字符串2、使用window.open方式打开新窗口,会导致IE下返回空字符串3、鼠标拖拽打开新窗口4、点击flash内部链接5、https跳转到http,浏览器是不会发送referrer的

(0) (0)
js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别 (译)
淩度奢望

stackOverflow中看到了很久以前问的一个关于函数声明的问题,问题对函数剖析的特别深。这里翻译了一下组织成一篇小博文,加深一下对这两种声明方式的印象。虽是老调重弹,但是只要能帮助理解问题,不管多老,都是好的。

问:

 

js中有两种声明函数的方法,分别为:

var functionOne = function() {
// Some code
};

function functionTwo() {
// Some code
}

为什么会有两种不同的方法?每个方法的优点和缺点分别是什么?有什么情况是一种方法能完成而另外一种方法不能完成的吗?

答:

 

by @Greg

不同点在于functionOne只会在到达赋值的那一行才会被真正定义,而functionTwo会在 包含它的函数或script脚本 执行的时候马上被定义。例如:

(0) (0)
1 / 13
Bio:{{user.bio== undefined?'(→_→)Nothing':user.bio}}
发帖
个人中心
消息
{{noticeNum}}
登出