web开发中如何避免程序漏洞和进行有效防护

《白帽子讲web安全》中有一句话:互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。

--------------------------------------------------2019-10-23-------------------------------------------------------

在我们码代码的时候,就要从黑客的心理来研究自己的代码,是否会有机可乘。

以下仅为个人见解,有错误请指正。

其实Web攻击可以分为三大类

一:SQL注入:通过web表单或者在域名中加入get请求参数,最终骗过服务器来执行恶意的SQL命令。通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

二:XSS(跨站脚本攻击):xss攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是javascript,但实际上也可以包括java、 vbscript、activex、 flash 或者甚至是普通的html。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

三:网页挂马:网页挂马有很多途径,例如通过网页上传图片/文件表单,把木马隐藏成图片文件,上传之后,文件自动执行,从而获取网站目录以及文件。

下面我们就来针对三个大类来分析分析。

一:SQL注入

针对SQL注入,我们的策略就是:永远不要相信用户在表单中输入的内容是安全的。无论是否安全,都需要进行过滤,君子小人都得防。通过SQL注入,从而取得隐藏数据,或者覆盖关键的值,甚至执行主机操作系统的目的。

对于我们开发者,不要直接用root用户来链接数据库,root权限太高,如果黑客获取到我们root账号的密码,对于数据库来说后果不堪设想,具体后果可以参考一些大型网站或者集团的数据库泄漏事件,例如某家宾馆。

例如我们在写程序的时候,会使用get方式来传递变量,www.aaa.com/test.php?id=1

但是经过SQL注入之后,www.xxx.com/test.php?id=6 union select 1,2,3,4,5,6。假如我们不经过过滤,则有可能查询出1~6条记录。

我们在代码中,无论是get还是post的变量,都要对进行严格的过滤。通过过滤把变量转义成安全字符串。以下是我列出几个常用的防止SQL注入的几个函数:

  1. 方法1:mysql_real_escape_string(),转义SQL语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集,需要保证当前是连接状态才能用该函数,否则会报警告。这个函数在php.ini中默认是关闭的。
  2. 方法2:addslashes(),addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
  3. 方法3:magic_quotes_gpc,magic_quotes_gpc函数在php中的作用是自动吧用户提交对sql的查询进行转换。针对magic_quotes_gpc是否开启,我们可以用get_magic_quotes_gpc()来判断,开启返回1,关闭返回0。我们可以通过判断,来决定是否使用addslashes()。

二:XSS(跨站脚本攻击)

策略与防SQL注入雷同,代码不经过严格过滤或者没有过滤,黑客通过提交的数据输出到网页中,导致可以执行JS代码,或者修改网页内容。

XSS分为三类:反射型、存储型、DOM

  1. 反射型:也称非持久型XSS。XSS代码出现在URL参数中,浏览器发出请求时,参数值作为输入变量提交到服务器,服务器解析后参数值出现在相应的HTML中,最后浏览器解析执行这段XSS代码。
  2. 存储型:又称持久型xss,它和反射型xss最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。
  3. DOM XSS:与反射型xss和存储型xss的差别是在于dom xss的代码不需要服务器解析响应的直接参与,触发xss靠的是浏览器dom解析器的解析,可以完全认为是客户端的事情。

针对XSS攻击,我们需要根据实际情况对用户的输入进行严格的过滤。

三:网页挂马

在我们日常的建站系统中,免不了有需要用户上传文件等操作,一些黑色就利用上传文件,将图片重新编码,并加入代码上传之后,以达到目的。

 

以上三种方式归根结底,一句话就是:用户所有输入的信息都是不安全的。

变量部分:、

可以参考 php filter函数 ,对变量进行过滤。thinkphp用户使用I方法和input方法时,可以使用intval和filter_keyword来进一步过滤(浮点过滤具体是个啥,一下子想不起来了),

XSS攻击:

1.在表单提交或者url参数传递前,对需要的参数进行过滤

2.过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出 可以利用下面这些函数对出现xss漏洞的参数进行过滤

(1)htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

(2)htmlentities() 函数,用于转义处理在页面上显示的文本。

(3)strip_tags() 函数,过滤掉输入、输出里面的恶意标签。

(4)header() 函数,使用header("content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。

(5)urlencode() 函数,用于输出处理字符型参数带入页面链接中。

(6)intval() 函数用于处理数值型参数输出页面中。

(7)自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。

1、2条引用自:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/79774187

另外XSS攻击最好是在php中加入header头文件来做进一步限制;

自己在帮朋友处理XSS攻击时,也是采用以上这些方法过滤掉危害参数,并加入header头来做限制,最后又加了个360免费的那个webscan才好了,目前360webscan好像停更了,改成了奇安信,地址:webscan.qianxin.com

网页挂马:

针对上传文件挂马的行为,我们需要在附件部分通过nginx或者apache来设置uploads目录禁止运行php,其他重要的目录来+i限制目录写入。

三种方式已经介绍完了,可能还有许许多多的攻击我们的方法,才疏学浅的我只能先遇到多少列出多少,一点一点补充了。

说几个工作中遇到的问题:

1、在一个页面中,通过id来查询logInfo,若logInfo中的status=0,就执行后续操作,如果为1就提示用户已发放。而我没有对logInfo是否存在进行判断,导致有人通过随意输入id号来套取奖励。归根结底还是自己在程序中的验证过少,吃一堑长一智。

2、还是同一个程序中,对当前某条记录的限制时间和状态值没有进行判断,导致出现很大的错误,这些都是在写程序的时候不严谨导致的。

 

---------------------------------------------------我是分割线,2019-10-25----------------------------------------------------

网站漏洞扫描:平时经常扫描网站漏洞,我的方法是使用ftp把网站程序以及附件下载下来,然后使用 D盾防火墙 进行扫描,window用户可直接使用D盾进行后台监控,这个软件可以直接查出网站是否有后门,以及是否有病毒附件等。

另外我还测试了几款web后门查杀扫描工具

1、WebShellkiller

深信服出品,但是后来深信服转型了,转做终端安全了,不能下载使用了。

2、河马查杀

功能不如D盾,扫描中经常卡死,体验不太好

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值