本文目录一览:
- 1、如何验证apache httponly cookie漏洞
- 2、搭建一个web论坛应用,框架为apache+linux+mysql,用java语言开发,存在哪些安全风险
- 3、Apache/PHP环境,怎么防止WebShell啊,头疼
- 4、SpringMVC如何有效的防止XSS注入?
- 5、对自己电脑上的Apache服务器进行XSS攻击,能不能在报文里看出问题
- 6、Spring MVC 如何防止XSS、SQL注入攻击
如何验证apache httponly cookie漏洞
insightlabs里看到
漏洞原理分析就不多说了,文章里都有
但并未提到漏洞修补方法,正好在这做个补充。
漏洞原理和过程:
1.受害者中了跨站,浏览器发出携带超大cookies的包
2.服务器返回400错误,并会在response包里返回cookies内容
其中也包括httponly的。如图,xss0被设置为httpony依然显示出来
解决方案:
于是可以通过错误处理来屏蔽。
Apache官方提供4种错误处理方式 如下
In the event of a problem or error, Apachecan be configured to do one of four things,
1.output asimple hardcoded error message输出一个简单生硬的错误代码信息
2.output acustomized message输出一段信息
3.redirect to alocalURL-pathto handle the problem/error转向一个本地的自定义页面
4.redirect to an externalURLto handle theproblem/error转向一个外部URL
经测试,对于400错误只有方法2有效,返回包不会再包含cookie内容
Apache配置:
ErrorDocument400 " security test"
当然,升级apache到最新也可:)。
搭建一个web论坛应用,框架为apache+linux+mysql,用java语言开发,存在哪些安全风险
服务器应该用tomcat什么的吧,apache只能跑静态页面。至于说安全风险,就和其他网站差不多啊,sql注入什么的
Apache/PHP环境,怎么防止WebShell啊,头疼
etc/passwd,/etc/init.d目录本来就是所有用户都可以访问的。
与其设置webshell的权限,不如做好web的安全开发,关闭不安全方法;;做好输入校验,输出编码,防止SQL注入,跨站脚本,XSS;以及安全配置,关闭web容器控制台……
另外就是要做好操作系统的安全防护,用户名密码不能太简单,增加防火墙
只要你的webshell不被非法获取,不额外设置webshell有什么关系。
SpringMVC如何有效的防止XSS注入?
在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原
在显示的时候对非法字符进行转义
如果项目还处在起步阶段,建议使用第二种,直接使用jstl的c:out标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(//g, ‘’).replace(//g, ‘’).replace(//g, ‘’).replace(/”/g, ‘"’);}
如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() { super(); }
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) {
if (text == null) {
setValue(null);} else {String value = text;
if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); }
if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); }
if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null ? value.toString() : “”; }}
在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。
下面我们在@Controller中注册@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。
对自己电脑上的Apache服务器进行XSS攻击,能不能在报文里看出问题
解决方案:
在httpd.conf的尾部添加:
TraceEnable off
备注:UPUPW Apache版已经修复此漏洞
Spring MVC 如何防止XSS、SQL注入攻击
在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原 在显示的时候对非法字符进行转义 如果项目还处在起步阶段,建议使用第二种,直接使用jstl的c:out标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。 附:Javascript方法: String.prototype.escapeHTML = function () { return this.replace(//g, ‘’).replace(//g, ‘’).replace(//g, ‘’).replace(/”/g, ‘"’);} 如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils public class StringEscapeEditor extends PropertyEditorSupport { private boolean escapeHTML; private boolean escapeJavaScript; private boolean escapeSQL; public StringEscapeEditor() { super(); } public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();this.escapeHTML = escapeHTML; this.escapeJavaScript = escapeJavaScript; this.escapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) { if (text == null) { setValue(null);} else {String value = text; if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); } if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); } if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null ? value.toString() : “”; }} 在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。 下面我们在@Controller中注册@InitBinder @InitBinder public void initBinder(WebDataBinder binder) { 这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。至此第二种方法完成,但是在还原的方法暂时还没有。