2016年9月26日星期一
2016年9月23日星期五
csrf(跨站请求伪造)流程
1。用户正常登录了正规网站A。产生了cookie。
2。用户没退出的情况时,访问了网站B。B的页面里面,有网站A的连接,比如http://www.a.com/xxx,比如<img src="http://www.a.com/xxx/yyy"/>
3。用户往往B的他页面时,会去访问A,访问A时也会带上A的cookie,由于cookie是正常的,A会认为是一个合法的请求,进而进行处理。自然B网站也可以搞自动post等背后动作,只要cookie有效。
对于这样的情况,网站A的可以检查http_Referer来判断,但是referer也是可以伪造的,不保险。
所以有效的还是在form里面,埋入token。
spring security里面的csrf对策,就是埋入token,来检测请求的有效性。但是,一旦启用了csrf,就必须用到session。有没有不用session的csrf的检测方法呢?
【仔细看了文档,spring也可以将csrf写入cookie里,来做到stateless,CookieCsrfTokenRepository】
考虑到的方法有,写cookie,cookie里面埋入token,并且form里面也埋入hash过的token。服务器端来比较两个token是否一样。这里用到的原理是,第三方网站(比如上面的B)没法获取A的cookie【也是理论上的】,所以B的页面的form里面,也就没法埋入A的cookie了。
http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html
的文档里面,描述了为啥没用CookieCsrf作为默认而用Session作为默认的原因。如果要用session,那么普通的rest也就是有状态了,所有的请求都需要提交csrf字段。
https://www.blogger.com/blogger.g?blogID=8899947124180453470#editor/target=post;postID=327728104436759904
如果cookie泄漏了怎么办?XSS(跨站脚本攻击)手法是可以偷cookie的。
怎么偷,首先,网站得是一个可以运行人发言的网站,比如论坛。A在发言代码里面嵌入javascript,如果网站没有做处理,照本显示,那么B浏览网站时就会执行A嵌入的代码。由于是网站页面自身的script,script就可以拿到B的cookie了,自然也可写script将偷来的cookie发给A。
spring security里面对xss,没有特别的招,就是3个encoding。
1。ouput文字的时候,html encoding
2。 ouput javascript的时候,javascript encoding
3。事件绑定时,handler encoding。
2。用户没退出的情况时,访问了网站B。B的页面里面,有网站A的连接,比如http://www.a.com/xxx,比如<img src="http://www.a.com/xxx/yyy"/>
3。用户往往B的他页面时,会去访问A,访问A时也会带上A的cookie,由于cookie是正常的,A会认为是一个合法的请求,进而进行处理。自然B网站也可以搞自动post等背后动作,只要cookie有效。
对于这样的情况,网站A的可以检查http_Referer来判断,但是referer也是可以伪造的,不保险。
所以有效的还是在form里面,埋入token。
spring security里面的csrf对策,就是埋入token,来检测请求的有效性。但是,一旦启用了csrf,就必须用到session。有没有不用session的csrf的检测方法呢?
【仔细看了文档,spring也可以将csrf写入cookie里,来做到stateless,CookieCsrfTokenRepository】
考虑到的方法有,写cookie,cookie里面埋入token,并且form里面也埋入hash过的token。服务器端来比较两个token是否一样。这里用到的原理是,第三方网站(比如上面的B)没法获取A的cookie【也是理论上的】,所以B的页面的form里面,也就没法埋入A的cookie了。
http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html
的文档里面,描述了为啥没用CookieCsrf作为默认而用Session作为默认的原因。如果要用session,那么普通的rest也就是有状态了,所有的请求都需要提交csrf字段。
https://www.blogger.com/blogger.g?blogID=8899947124180453470#editor/target=post;postID=327728104436759904
如果cookie泄漏了怎么办?XSS(跨站脚本攻击)手法是可以偷cookie的。
怎么偷,首先,网站得是一个可以运行人发言的网站,比如论坛。A在发言代码里面嵌入javascript,如果网站没有做处理,照本显示,那么B浏览网站时就会执行A嵌入的代码。由于是网站页面自身的script,script就可以拿到B的cookie了,自然也可写script将偷来的cookie发给A。
spring security里面对xss,没有特别的招,就是3个encoding。
1。ouput文字的时候,html encoding
2。 ouput javascript的时候,javascript encoding
3。事件绑定时,handler encoding。
2016年9月21日星期三
spring oauth2,不用config,用xml
http://www.cnblogs.com/tinkerz/p/3759796.html
https://github.com/spring-projects/spring-security-oauth/blob/114fbd44beef0382009f207c08f0b1d9c24e95a9/samples/oauth2/sparklr/src/main/webapp/WEB-INF/spring-servlet.xml
https://github.com/cloudfoundry/uaa/blob/master/samples/api/src/main/webapp/WEB-INF/spring-servlet.xml
http://blog.csdn.net/monkeyking1987/article/details/16828059
http://wwwcomy.iteye.com/blog/2230265
https://gist.github.com/ddewaele/6411612
https://github.com/spring-projects/spring-security-oauth/blob/114fbd44beef0382009f207c08f0b1d9c24e95a9/samples/oauth2/sparklr/src/main/webapp/WEB-INF/spring-servlet.xml
https://github.com/cloudfoundry/uaa/blob/master/samples/api/src/main/webapp/WEB-INF/spring-servlet.xml
http://blog.csdn.net/monkeyking1987/article/details/16828059
http://wwwcomy.iteye.com/blog/2230265
https://gist.github.com/ddewaele/6411612
2016年9月16日星期五
查看进程的运行环境
strings
–a /proc/<pid_of_the_process>/environ
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variables
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variables
2016年9月14日星期三
ftp的文件名乱码
vsftpd的文件上载后乱码,自然,可以设置ftp客户端的设定,设置为utf8,但是这得告诉别人这么去设置,需要找个法子,设置自然而然转码的的功能,查到vsftpd没这个功能,虽然以前有人做了patch,非官方的。
找到了proftpd,
设置UseEncoding UTF-8 CP932 strict,就可以了。
找到了proftpd,
设置UseEncoding UTF-8 CP932 strict,就可以了。
2016年9月5日星期一
org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug
这个一直输出,就算定义了
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger">
<level value="info" />
</logger>
也没用,查了一下,
别人也遇到这个问题,
http://stackoverflow.com/questions/27772563/why-mybatis-force-prints-log4j-debug-info-to-the-console
解决法子是将mapper的logger定义为info就可以。
看BaseJdbcLogger的源码,可以知道里面的log不是自己的,而是构造函数里面传递进去的
protected Log statementLog;
public BaseJdbcLogger(Log log, int queryStack) {
this.statementLog = log;
if (queryStack == 0) {
this.queryStack = 1;
} else {
this.queryStack = queryStack;
}
}
这就是原因了。
这里也碰到一个问题,就是loggername是否支持wildchar的事情
因为我的mapper不是在一个包下,而是在各个repository自己的目录下,比如,没有这样的定义
<logger name="xiu.domain.repository.*.*Mapper">
<level value="info" />
</logger>
找了找,发现logback有filter功能,于是这样来搞
http://logback.qos.ch/manual/filters.html
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>mapper</Name>
<regex>xiu\.domain\.repository\..+\.\w*Mapper</regex>
</matcher>
<expression>mapper.matches(logger)</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<logger name="org.apache.ibatis.logging.jdbc.BaseJdbcLogger">
<level value="info" />
</logger>
也没用,查了一下,
别人也遇到这个问题,
http://stackoverflow.com/questions/27772563/why-mybatis-force-prints-log4j-debug-info-to-the-console
解决法子是将mapper的logger定义为info就可以。
看BaseJdbcLogger的源码,可以知道里面的log不是自己的,而是构造函数里面传递进去的
protected Log statementLog;
public BaseJdbcLogger(Log log, int queryStack) {
this.statementLog = log;
if (queryStack == 0) {
this.queryStack = 1;
} else {
this.queryStack = queryStack;
}
}
这就是原因了。
这里也碰到一个问题,就是loggername是否支持wildchar的事情
因为我的mapper不是在一个包下,而是在各个repository自己的目录下,比如,没有这样的定义
<logger name="xiu.domain.repository.*.*Mapper">
<level value="info" />
</logger>
找了找,发现logback有filter功能,于是这样来搞
http://logback.qos.ch/manual/filters.html
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator>
<matcher>
<Name>mapper</Name>
<regex>xiu\.domain\.repository\..+\.\w*Mapper</regex>
</matcher>
<expression>mapper.matches(logger)</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
2016年9月3日星期六
订阅:
博文 (Atom)