一、网站建设CSRF/XSRF
跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF。攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账或购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
防御措施
1.检查Referer字段
HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,Referer字段应和请求的地址位于同一域名下。如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,服务器就能识别出恶意的访问。但这种办法也有其局限性,完全依赖浏览器发送正确的Referer字段,无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改Referer字段的可能。
2.添加校验码
CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,如果在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。相对Referer,校验码则更有效,即提交请求时,需要用户输入校验码,避免用户在不知情的情况下被攻击者伪造请求。
XSS即跨站脚本攻击,是普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
防御措施
XSS攻击主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,安全的软件开发流程及其他一些编程安全原则也可以减少XSS安全漏洞的发生。
防范XSS漏洞原则包括:
1.不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、Referer、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须进行编码(encode),避免不小心把html标签显示出来。
2.验证码系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息中的img等链接,检查是否有重定向回本站、不是真的图片等可疑操作。
3.cookie防盗,不要在cookie中泄露用户信息,如Email、密码等。通过使cookie和系统Ip绑定降低cookie泄露后的风险,就算攻击者拿到的cookie信息没有任何价值。早前微软提出,通过Cookie添加HttpOnly属性,可避免被攻击脚本窃取。
4.确认接收的内容被合理地规范化,去掉任何对远程内容信息的引用,特别是css和JavaScript。
SQL注入是应用程序对用户输入的数据信息合法性没做判断或过滤不严,攻击者在应用程序中先定义好的查询语句的结尾上添加额外的SQL语句,在应用程序管理者不知情的情况下实现非法操作,实现欺骗数据库服务器执行非授权的任意查询,最终得到相应的数据信息。
防御措施
1.关闭网站错误回显,不要把服务器内部500错误显示到浏览器上。
2.通过正则匹配过滤请求的数据中可能注入的SQL关键字如“drop table”,“Update”、“Inser”,“EXEC”等。
3.使用预编译法,绑定参数是理想的防止SQL注入方法。攻击者的恶意SQL会被当做SQL的参数,而不是命令被执行。
4.在写SQL语言时,禁止将变量直接写入到SQL语句,必须通过设置对应的参数来传递相关的变量。数据输入不能直接嵌入到查询语句中。过滤输入的内容,过滤掉不安全的输入数据信息或参数传值的方式传递输入变量。
5.对用户分级管理,严格控制用户权限,对普通用户,禁止给予建立、删除、修改数据库等权限,只能系统管理员才具有增、删、改、查的权限。
6.在获取用户输入提交的参数时,首先要进行基础过滤,再根据程序的功能及用户输入的可能性进行二次过滤。
7.写程序时使用安全参数来杜绝注入式攻击。
8.访问者的数据输入必须经过严格的验证才能进入系统,验证不通过的输入直接被拒绝访问数据库,且向上层系统发出错误提示。同时在客户端访问程序中验证访问者的相关输入信息,如果多层验证中的下层如果验证数据通过,那么绕过客户端的攻击者就能够随意访问系统。所以在进行多层验证时,要每个层次相互配合,要客户端和系统端都进行有效的验证防护,才可以更好防范。
9.对数据库信息加密处理,密方和解密方都使用相同的加密算法和密钥,称为对称加密,对称加密算法有AES、DES等。使用不同的密钥来进行加解密,密钥被分为公钥和私钥,称为非对称加密,非对称加密算法有RSA。利用哈希算法使数据加密之后无法解密回原数据,称为不可逆加密,哈希算法有md5、SHA-1等。
10.通过专业的漏洞扫描工具,可以及时扫描到系统存在的相应漏洞。系统管理员可以通过扫描到的安全漏洞,根据不同的情况采取相应的防范措施封堵相应的漏洞。
钓鱼式攻击是引导用户到URL与界面外观与真正网站相似的假冒网站输入数据信息,以此来诱骗受害人,是一种犯罪诈骗行为过程。钓鱼攻击分网站伪造、热点网钓、链接操控、隐蔽漏洞、过滤器规避、电话网钓。
防御措施
1.不要打开陌生人的电子邮件和即时通讯工具上传来的任何消息。
2.加强电脑安全管理,安装杀毒软件及防火墙,升级病毒知识库和操作系统补丁。
3.不登录不熟悉的网站。
4.提高网站制作的难度:不使用弹出式广告、不隐藏地址栏、不使用框架等。
webshell被网站建设者用于网站管理、服务器管理等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。黑客入侵网站后,通常会将后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问后门,得到一个命令执行环境,达到控制网站服务器的目的。
防御措施
做到防注入、防爆库、防COOKIES欺骗、防跨站攻击(xss)等,务必配置好服务器FSO权限。最小的权限相当于最大的安全。防范webshell最理想的方法就是:可写目录不给执行权限,有执行权限的目录不给写权限。
1.日常观察服务器中是否有不明文件。
2.利用外部搜索工具,关闭网站搜索功能,防止爆出数据。
3.保持程序是最新版本。
4.上传程序需进行身份认证,只允许信任的人上传程序。
5.程序管理员的账号密码要够复杂,并定期更换。
6.不要在前端页面加后台登录地址链接。
7.及时备份重要数据文件。
8.删除后台登录页面,需要登录时再上传。
9.只能白名单上传文件,遵循上传目录权限最小原则。
10.不安装asp上传程序,使用ftp上传。
DoS是Denial of Service的简称是拒绝服务的意思,目的是使计算机或网络无法提供正常的服务。常见的DoS攻击有计算机网络宽带攻击和连通性攻击。
防御措施
1.网络程序管理员要积极谨慎地维护系统,确保无安全隐患和漏洞。
2.安装防火墙等安全设备过滤DoS攻击。
3.定期查看安全设备的日志,及时发现对系统的安全威胁行为。
4.缩短SYN Timeout时间。
5.设置SYN Cookie,给每一个请求连接的IP地址分配一个Cookie,如短时间内连续收到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
防御措施
1.建立完善的网络安全体系。
2.升级系统,加强系统的抗攻击能力。
3.安装防火墙,对所有进出的数据进行过滤,检查边界安全规则,确保输出的包受到正确限制。
4.优化网络结构及路由,对路由合理设置,来降低攻击的风险。
CC(ChallengeCollapsar,挑战黑洞)攻击是DDoS攻击的一种类型,实现DDOS和伪装就叫cc攻击,攻击者使用代理服务器生成指向受害主机的合法请求,利用众多广泛可用的免费代理服务器发动DDoS攻击,不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。
防御措施
1.提高服务器的并发能力。
2.升级服务器cpu、内存、ssd固态硬盘提升服务器的承载力。
3.对服务中具备高度共性,多用户可重用,或单用户多次可重用的数据进行数据缓存。
4.缓存不要使用文件形式,可以使用redis、memcached等基于内存的nosql缓存服务,并且与应用服务器分离。
5.生成静态化的html页面文件,利用客户端浏览器的缓存功能或者服务端的缓存服务,以及CDN节点的缓冲服务,来降低服务器端的数据检索和计算压力,快速响应结果并释放连接进程。
6.基于session方式为客户端分配唯一的识别SID,服务端可以将SID存到缓存中。当客户端请求服务时,如果没有带SID(cookie中或请求参数中等),则由服务端快速分配一个并返回。或将分配SID独立出业务服务,当客户端请求时带了合法SID(即SID能在服务端缓存中匹配到),便可以依据SID对客户端进行频率限制。而对于SID非法的请求,则直接拒绝服务。相比根据IP进行的频率限制,根据SID的频率限制更加精准可控。
7.调大限制阈值,防止恶意访问穿透到应用服务器上,造成应用服务器压力。
1.彩虹表
彩虹表是马丁·赫尔曼早期提出的简单算法的应用,可快速地根据哈希值破解各类密码,是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。
使用加salt的KDF函数可以使这种攻击难以实现。
2.暴力破解
暴力破解一般指枚举法,在进行归纳推理时,逐个考察了某类事件的所有可能情况,利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案。
防御措施
(1)使用fail2ban防御。
(2)不允许密码登录,只能通过认证秘钥登录。
(3)添加普通账号,不允许root账号直接登录,授root权限。
(4)提高密码复杂度,密码长度要大于20位。
(5)修改ssh的默认端口。
3.撞库攻击
撞库攻击是黑客通过收集互联网已泄露的用户和密码数据信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
防御措施
(1)限制账号层,24小时内密码错误5次禁止登录。
(2)单个IP一段时间内密码错误次数超过阈值时,禁止IP。
(3)需通过验证码登录。
(4)建立一个IP画像库,对代理IP、IDC等高危的IP直接禁止登录。
(5)通过在客户端植入sdk,识别出非正常的设备,然后对该设备进行封杀。