常见的网站攻击以及如何防御自己的网站被恶意攻击

1,XSS攻击:Cross Site Script,跨站脚本攻击,指黑客通过篡改网页,在提交的内容中写一些恶意攻击的js脚本。举个例子,攻击者在网站留言或者发布带有恶意脚本的连接,诱导用户点击,跳转到攻击者搭建的服务器上,

2,SQL注入攻击,这里直接举个例子,当我们在登录时,需要输入用户名和密码,作为开发者的我们应该都会知道,用户输入的信息,会动态拼接到SQL语句中,例如我们最常见的:

[java]view plain copy

select * from user where username=? and password=?;

[java]view plain copy

select * from user where username='+ username+ ' and password = '+ password+';

用户输入的用户名和密码,会拼接成一个语句(使用占位符的情况除外),然后组装成一个SQL,发送到数据库进行查询;如果用户输入了下面的内容:

[java]view plain copy

用户名:a or 1=1

密码:a or 1=1

这样,这条SQL语句就会成功执行,并且查询的记录数大于0,如果我们根据查询的记录数来判断用户是否存在,那么这时,系统就被SQL注入攻击成功了。

3,CSRF攻击:Cross Site Request Forgery,跨站点请求伪造,攻击者利用合法用户的身份,在用户不知情的情况下,进行非法操作,比如转账、付款等。

4,Session劫持,这是比较复杂的一个过程,这种劫持是利用了TCP三次握手的漏洞,冒充用户与服务器进行通信。

5,Error Code,也就是程序报错信息显示到用户面前,这样就会报系统使用的技术和开发语言暴露给攻击者,给攻击者攻击系统提供便利。

6,HTML注释,道理和Error Code类似,把注释信息写在HTML页面,用户通过查看页面信息很容易看到这些注释信息,而这些信息可以说是网站开发的说明书,很容易被攻击者利用。

7,文件上传,最常见的情形就是,如果攻击者上传了可执行的文件,对服务器是很不利的。

如何防御呢,我们先来看XSS攻击的防御方法

一,如何防御XSS攻击

防御XSS攻击,说白了,就是对用户输入的字符串进行处理,防止js脚本执行,我们通常的做法就是把敏感词或者特殊符号就行处理,把用户输入的内容作为字符串来展示,而不能当做js脚本执行。

[java]view plain copy

/**

* 实例代码:处理用户输入内容

*/

public static String dealWithXSS(String value) {

value = value.replaceAll("", "& gt;");

value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");

value = value.replaceAll("'", "& #39;");

value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");

value = value.replaceAll("script", "");

value = value.replaceAll("eval\\((.*)\\)", "");

return value;

}

在控制器中,或者在前台页面,我们可以对用户输入的字符串进行处理,通常我们会这样做:

[java]view plain copy

String name = RequestUtil.dealWithXSS(reuqest.getParameter("name"));

过滤脚本攻击的思路,就是对用户输入的字段进行处理,屏蔽掉其中的敏感词或者特殊字符,防止JS执行。对网站安全性要求较高的公司,在系统测试阶段,都会进行脚本攻击的测试。因此,脚本过滤攻击刻不容缓。

二,如何预防SQL注入

1,使用预编译的SQL语句,也就是我们熟知的PreparedStatement。我们都知道,数据库执行SQL的过程,可以分为2个步骤,第一步服务器解析请求的SQL语句,第二步执行SQL语句,而预编译的SQL语句在SQL传入数据库时就被编译过了,后面传递参数过来的时候,这个参数只会被当做参数,不会被当做SQL语句重新编译一次。所以就可以避免SQL注入。

2,对用户输入的用户名和密码进行‘消毒’,防止特殊的符号或者关键字被传递到数据库,比如单引号或者drop table这样的关键字。

三,如何防御CSRF攻击

通过让用户输入验证码的方式,可以避免攻击者在用户不知情的情况下提交请求。但是这样会影响用户体验,所以要权衡利弊来选择。

四,session劫持

这个较复杂,牵扯到很多网络通信的知识,博主先充电,然后奉上。

五,Error Code

这个其实也比较容易解决,我们在使用SpringMVC进行拦截时,可以把可以预知的错误都捕获到,然后返回一个自定义的页面。当然这种情况,即使一般的小公司,也不会容忍这种情况的发生。但是程序报错是一个复杂的系统问题,我们只能尽可能捕获预知的错误,但是总有无法预知的错误等着我们,所以保持一个居安思危的心态很重要。

六,HTML注释

这个是习惯问题,或者说是项目管理问题,只要养成良好的代码编写习惯,或者项目经理对代码进行扫描,就可以有效避免此类安全问题。

七,文件上传

这一点,现在大部分网站做的都比较好,对上传的文件类型,通过后缀进行过滤,禁止用户上传一些可能有危害的文件类型。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171228A0E0JW00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区