白帽子讲web安全

世界安全观

Web安全筒史

 

起初,研究计算机系统和网络的人,被称为"Hacker",“Hacker"在中国按照音译,被称为“黑客”

 

对于现代计算机系统来说,在用户态的最高权限是root (administrator),也是黑客们最渴望能够获取的系统最高权限。不想拿到“root"”的黑客,不是好黑客。漏洞利用代码能够帮助黑客们达成这一目标。

黑客们使用的漏洞利用代码,被称为"exploit"。在黑客的世界里,有的黑客,精通计算机技术,能自己挖掘漏洞,并编写exploit;

只对攻击本身感兴趣,对计算机原理和各种编程技术的了解比较粗浅,因此只懂得编译别人的代码, 自己并没有动手能力,这种黑客被称为“SriptKids",即“·脚本小子”。

 

今天已经形成产业的计算机犯罪、网络犯罪中,造成主要破坏的,也是这些“脚本小子”。

 

中国黑客简史

笔者把中国黑客的发展分为了:启蒙时代、黄金时代、黑暗时代。

 

黑客技术的发展历程

从黑客技术发展的角度看,在早期,黑客攻击的目标以系统软件居多。

一方面,是由于这个时期的Web技术发展还远远不成熟;

另一方面,则是因为通过攻击系统软件,黑客们往往能够直接获取root权限。

 

这段时期,涌现出了非常多的经典漏洞以及"exploit"。比如著名的黑客组织TESO,就曾经编写过一个攻击SSH的exploit,并公然在exploit的banner中宣称曾经利用这个exploit入侵过cia.gov (美国中央情报局)。

 

2003年的冲击波蠕虫是一个里程碑式的事件,这个针对Windows操作系统RPC服务(运行在445端口)的蠕虫,在很短的时间内席卷了全球,造成了数百万台机器被感染,损失难以估量。在此次事件后,网络运营商们很坚决地在骨干网络上屏蔽了135、445等端口的连接请求。此次事件之后,整个互联网对于安全的重视达到了一个空前的高度。

 

Web安全的兴起

 

SQL注入的出现是Web安全史上的一个里程碑,它最早出现大概是在1999年,

黑客们发现通过SQL注入攻击,可以获取很多重要的、敏感的数据,甚至能够通过数据库获取系统访问权限,这种效果并不比直接攻击系统软件差。SQL注入漏洞至今仍然是Web安全领域中的一个重要组成部分。

xss (跨站脚本攻击)的出现则是Web安全史上的另一个里程碑。实际上, xss的出现时间和SQL注入差不多,但是真正引起人们重视则是在大概2003年以后。在经历了MySpace的xSs蠕虫事件后,安全界对xss的重视程度提高了很多, OWASP 2007 TOP 10威胁甚至把xss 排在榜首。

 

黑帽子,白帽子

 

白帽子,则是指那些精通安全技术,但是工作在反黑客领域的专家们;

黑帽子,则是指利用黑客技术造成破坏,甚至进行网络犯罪的群体。

 

返璞归真,揭秘安全的本质

 

 

通过一个安全检查(过滤、净化)的过程,可以梳理未知的人或物,使其变得可信任。

被划分出来的具有不同信任级别的区域,我们称为信任域,

划分两个不同信任域之间的边界,我们称为信任边界。

数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;

数据从低等级的 信任域流向高等级的信任域,则需要经过信任边界的安全检查。

 

笔者认为,安全问题的本质是信任的问题。

 

一切的安全方案设计的基础,都是建立在信任关系上的。我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水,无根之木,无法设计,也无法完成。

 

安全三要素

 

安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity),可用性(Availability).

 

机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。

完整性则要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字,签名。

可用性要求保护资源是“随需而得"。

 

如何实施安全评估

资产等级划分

明确工作的目标是什么,要保护什么。互联网的核心问题是数据安全的问题,对互联网公司的资产进行等级划分就是对数据做等级划分。有的公司关心客户数据,有的公司关心员工资料信息,所以根据公司的业务的不同,对其进行的侧重点也不同。

 

威胁分析(威胁建模STRIDE模型)

Spoofing(伪装)

冒充他人身份

 

Tampering(篡改)

修改数据或代码

 

Repudiation(抵赖)

否认做过的事

 

InformationDisclosure(信息泄露)

机密信息泄露

 

Denial of Service(拒绝服务)

拒绝服务

 

Elevation of Privilege(提升权限)

未经授权获得许可

 

风险分析

 

白帽子兵法

Secure By Default 原则

制定黑名单、白名单。白名单相较于黑名单来说更安全,但白名单并不是完全安全的,因为安全建立与信任,白名单中若出现不安全的名单那么信任列表将会变得不可信。

 

最小权限原则授予主体必要的权限,不要过度授权,这样能有效的减少系统、网络、应用、数据库出错的机会。

 

纵深防御原则

从不同层面、不同角度对系统做出整体的解决方案,而不是一个安全方案做两遍或者是多遍(木桶理论)。

 

在正确的地方做正确的事,防止造成”乌龙“(例如XSS过滤关键字可能会过滤“1<2”->”1 2“.

 

数据与代码分离(数据就是数据,不能被执行为代码)

不可预测性–>加密算法、随机数、哈希(随机数,比如抓取页面id=随机数,防止csrf的随机数token)

 

 

客户端脚本安全

 

浏览器安全

同源策略

 

同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也最基本的安全功能

浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性。

同源策略限制了来自不同源(origin)的文档和脚本。这一策略极其重要,如果没有同源策略,可能a.com的一段JS脚本,在b.com未曾加载此脚本时,也可以随意修改b.com的页面(在浏览器显示中)。为了不发生混乱,浏览器提出“Origin”(源)的概念。来自不同Origin的对象无法相互干扰。

 

 

由上表可以看出,影响“源”的因素有: host (域名或IP地址,如果是IP地址则看做一个根域名)、子域名、端口、协议。

 

需要注意的是,对于当前页面来说,页面内存放JS文件的域并不重要,重要的是加载JS的页面所在的域是什么。举例说明:

a.com通过代码<script src=http://b.com/b.js ></script>加载了b.com上的b.js。因为b.js是运行在a.com上的,所以b.js的域就是a.com。

 

在浏览器中,<script> <img> <iframe> <link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带”src”属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。不同于XMLHttpRequest的是,通过src属性加载的资源,浏览器限制了JS的权限,使其不能读,写返回的内容。对于XMLHttpRequest,它收到同源策略的约束,不能跨域访问资源,在AJAX应用的开发中尤其需要注意到这一点。

 

浏览器沙盒

 

“挂马”:在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑客圈子里被形象地称为“挂马”。

“挂马”是浏览器需要面对的一个主要威胁。

 

Google Chrome是第一个采取多进程架构的浏览器。Google Chrome的主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。插件进程如flash、 java, pdf等与浏览器进程严格隔离,因此不会互相影响

 

 

渲染引擎由Sandbox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,在其中会进行一些安全检查。

Sandbox即沙箱, Sandbox已经成为泛指“资源隔离类模块”的代名词。Sandbox的设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。

 

恶意网址拦截

钓鱼网站、诈骗网站对于用户来说也是一种恶意网址。为了保护用户安全,浏览器厂商纷纷推出了各自的拦截恶意网址功能。目前各个浏览器的拦截恶意网址的功能都是基于“黑名单”的。

恶意网址拦截的工作原理:,一般都是浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如果用户上网时访问的网址存在于此黑名单中,浏览器就会弹出一个警告页面。

 

常见的恶意网址分为两类:

 

一类是挂马网站,这些网站通常包含有恶意的脚本如JavaScript或Flash,通过利用浏览器的漏洞(包括一些插件、控件漏洞)执行shellcode,在用户电脑中植入木马;

一类是钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。

 

 

跨站脚本攻击(XSS)

xss简介

 

跨站脚本攻击,英文全称是Cross Site Script,本来缩写是css,但是为了和层叠样式表Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做"XSS"

xss攻击,通常指黑客通过"HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击

 

反射性XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型XSS也叫做“非持久型XSS”

 

 

存储型XSS

存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。比如博客网站若被写下了包含有恶意JavaScript代码,后面每个访问这个博客的用户都会执行一遍这个代码。

 

DOM型XSS

通过修改页面的DOM节点形成的XSS

DOM Based XSS实际上,这种类型的XSS并非按照“数据是否保存在服务器端”来划分, DOM Based xss, 从效果上来说也是反射型xSs

 

XSS攻击进阶

 

初探XSS Payload

xss攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为"XSS Payload"

XSS Payload实际上就是Javascript脚本(还可以是Flash或其他富客户端的脚本),

一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起"Cookie劫持攻击。Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户。

 

强大的XSS Payload

"Cookie劫持”并非所有的时候都会有效。有的网站可能会在Set-Cookie时给关键Cookie植入HttpOnly标识;有的网站则可能会把Cookie与客户端IP绑定(相关内容在"XSS的防御”一节中会具体介绍),从而使得xss窃取的Cookie失去意义。

 

构造GET与POST请求

一个网站的应用,只需要接受HTTP协议中的GET或POST请求,即可完成所有操作。"对于攻击者来说,仅通过JavaScript,就可以让浏览器发起这两种请求。

 

XSS构造技巧

1.利用字符编码

字符之间的不同组合可能会被编码所识别

2.绕过长度限制

利用事件来完成payload

比如原payload:<script>alert(123)</script>

利用事件缩短它:" onclick="alert(123)"

使用location.hash隐藏代码

某些环境下,使用注释符绕过长度限制

 

跨站点请求伪造(CSRF) 

CSRF的全名是Cross Site Request Forgery,翻译成中文就是跨站点请求伪造。它是一种常见的Web攻击,但很多开发者对它很陌生。CSRF也是Web安全中最容易被忽略的一种攻击方式,甚至很多安全工程师都不太理解它的利用条件与危害,因此不予重视。但CSRF在某些时候却能够产生强大的破坏性。

 

攻击者伪造的请求之所以能够被服务器验证通过,是因为用户的浏览器成功发送了Cookie的缘故。浏览器所持有的Cookie分为两种:

一种是"Session Cookie",又称“临时Cookie",

另一种是“Third-party Cookie",也称为“本地Cookie".

 

Third-party Cookie是服务器在Set-Cookie时指定了Expire时间,只有到了Expire时间后Cookie才会失效,所以这种Cookie会保存在本地,而Session Cookie则没有指定Expire时间,所以浏览器关闭后,Session Cookie就失效了。

 

例如IE浏览器,从一个域的页面中,要加载另一个域的资源,由于安全的原因,IE会阻止Third-party Cookie的发送,而只发送Session Cookie

 

CSRF防御

验证码

Referer Check:记录着上个页面的地址。但是它的缺点是服务器不是什么时候都能拿到的(比如从https跳转到htpp页面中)

加入随机Token。token生成时一定要足够随机

 

点击劫持

 

点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的,不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户在不知情的情况下点击透明的iframe页面。恰好在功能性按钮上,进而欺骗、劫持。

 

防御

frame busting:禁止iframe的嵌套,但是可能会被绕过

使用HTTP头X-Frame-Options:它有三个值

DENY:拒绝加载任何iframe页面

SAMEORIGIN:只能加载同源域名下的页面

ALLOW-FROM origin:允许iframe加载的页面地址

 

 

 

 

 

 

服务器端安全

注入攻击

sql注入

https://blog.csdn.net/m0_50879937/article/details/127037856

其他注入攻击

XML注入

代码注入

CLRF通过回车换行符来达到修改日志的、XSS的目的,“0x0d"、”0x0a“

CRLF 实际上是\r\n组成

通过在不同位置注入\r\n使其产生不同的效果,从而产生恶意代码

 

文件上传漏洞

指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

文件上传后导致的安全问题:

上传web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行

上传的是flash的策略文件crossdomain.xml,黑客控制flash在该域下的行为

上传的文件是病毒、木马文件,诱骗用户或管理员下载执行

钓鱼图片或包含了脚本的图片

完成该攻击需要满足以下几个条件

上传的文件能够被web容器解释执行

用户能够从web上访问这个文件

用户上传的文件不被修改

绕过文件上传检查

在文件名后添加%00或0x00,则可以实现文件名截断,从而绕过文件后缀的检查

伪造合法的文件头,将真实的PHP等脚本代码附在合法的文件头之后

apache文件解析问题

apache对于文件名是从后往前解析,直到遇到一个apahce认识的文件类型为止

如果需要增加让apache可以识别的文件类型,则需要在mine.types文件中设置新的配置

IIS文件解析

使用;截断(类似于0x00)

如果服务器配置不当,则put方法会造成安全漏洞

利用文件上传钓鱼

将文件上传到目标网站,然后通过传播这个文件的URL进行钓鱼,url中也不会出现钓鱼地址

设计安全的文件上传

文件上传的目录设置为不可执行,web容易不可解析,比如WEB-INF

判断文件类型。可以结合使用MIME Type,后缀检查等方式

使用随机数改写文件名和文件路径

单独设置文件服务器的域名

 

认证与会话管理

认证与授权

目的

认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么。

 

钥匙在认证的过程中,被称为“凭证”(Credential),开门的过程,对应的是登录(Login)。可是开门之后,什么事情能做,什么事情不能做,就是“授权”的管理范围了。开门之后,“能否进入卧室”这个权限被授予的前提,是需要识别出来的人到底是主人还是客人,所以如何授权是取决于认证的。

持有主人钥匙的人一定是主人吗?钥匙仅仅是一个很脆弱的凭证,其他的有诸如指纹,人脸,声音等生物特征来识别一个人的凭证。

认证实际上就是一个验证凭证的过程。

 

MD5

密码的保存必须是不可逆的加密方式进行加密,常见的有MD5和SHA-1彩虹表可以对MD5进行破解。彩虹表的思路是收集尽可能多的密码明文和明文对应的MD5值。这样只需要查询MD5值,就能找到该MD5值对应的明文。

为了避免密码哈希值泄露后,黑客能够直接通过彩虹表查询出密码明文,在计算密码明文的哈希值时,增加一个“Salt”。“Salt”是一个字符串,它的作用是增加明文的复杂度,并使得彩虹表一类的攻击失效。

 

Session与认证

Session是指一个会话,当用户对于同一网站页面进行请求时,为了告诉是哪个用户进行页面的浏览,那么直接告诉服务器使用哪一个Session,浏览器只需要把当前用户持有的SessionID告知服务器即可。

SessionID除了可以加密保存在Cookie中,也可以直接写入URL中。但直接写入URL中的话可能会被直接获得导致被非法授权。

 

Session Fixation攻击

黑客构造一个包含SessionID的URL,诱导用户进行登录,由于用户进行登录了,所以这个SessionID是有效的,这是黑客就可以使用这个URL进入这个用户的账户。

 

Session保持攻击

通过一直不断地刷新网页来达到Session不过期通过

XSS攻击将Cookie的Expire设置为永不过期

 

单点登录 SSO

它希望用户只需要登录一次,就可以访问所有的系统

 

OpenID

使用URL作为每一个用户的身份标识,用户只需要提供他的OpenID和他的OpenID的提供者,就能够首先先跳转到这个OpenID的提供方进行验证之后,重定向会网站。

 

 

访问控制

 

抽象的说就是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制

在一个安全系统中,确定功能主体的身份是“认证”解决的问题;客体是一种资源,是主体发起的请求的对象。主题可以干什么就是权限

基于URL的访问控制,在java中通过filter实现

垂直权限管理

访问控制实际上是建立用户和权限之间的对应关系。现在广泛应用的方法就是基于角色的访问控制,简称RBAC(就是用户->角色->权限)。基于角色的权限管理,我们可以称其为垂直权限管理

如果一个本属于低权限角色的用户通过一些方法获得了高权限角色的能力,则发生了越权访问(垂直越权)

水平权限管理

在RBAC的模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否能访问只属于用户B的数据DataB,因此发生了越权访问。

一个简单的数据级访问控制,可以考虑使用“用户组”的概念。同一用户组的成员才能实现对某些数据的操作。

OAuth简介

OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议。

OAuth和OpenID都致力于让互联网变得更加的开放。OpenID解决了认证问题,OAuth更注重授权

在OAuth中,涉及到了3个角色,分别是

Consumer:消费方(Client)

Service Provider:服务提供方(Server)

User:用户(Resource Owner)

 

加密算法与随机数

 

常见的加密算法分为分组加密算法和流密码加密算法

 

分组加密算法基于分组操作,根据算法的不同,每个分组的长度可能不同。代表算法有:AES、DES、IDEA等

  

流密码加密算法,每次只处理一个字节,密钥独立于消息之外,两者通过异或

 

针对加密算法的攻击,一般根据攻击者能获得的信息,可以分为:

 

唯密文攻击:攻击者有一些密文,它们是使用同一加密算法和同一密钥加密的

已知明文攻击:攻击者除了能得到一些密文外,还能得到这些密文对应的明文。

选择明文攻击:攻击者不仅得到一些密文和明文,还能选择用于加密的明文

选择密文攻击:攻击者可以选择不同的密文来解密

Reused Key Attack

在流密码的使用中,最常见的错误就是使用同一个密钥进行多次加/解密。(异或)

 

如果A代表明文A,B代表明文B,E(A)代表A的密文,E(B)代表B的密文,那么:

 

E(A) ^ E(B) = A ^ B

 

因此当知道其中三个时,便可推导出最后的一个

 

Bit-flipping Attack

当明白上边的公式,便可能构造出管理员的Cookie,从而获得管理员的权限

解决方法是验证密文的完整性,最常见的方法是增加带有KEY的MAC(消息验证码),通过MAC验证密文是否被篡改。通过哈希算法来实现的MAC,称为HMAC。

弱随机IV问题

通过暴力匹配,可以得到IV

WEP破解

WEP是一种常用的无线加密传输协议

WEP在加密过程中,有两个关键因素,一个是初始化向量IV,一个是对消息的CRC-32校验。

Aircrack实现破解WEP(WIFI):

加载目标

与目标网络进行协商

生成密钥流

构造ARP包

生成自己的ARP包

破解

ECB模式的缺陷

对于分组加密而言,出去算法本身,还有一些通用的加密模式,不同的加密算法会支持同样的几种加密模式。常见的模式有:ECB,CBC,CFB,OFB,CTR等。

ECB模式是最简单的一种加密模式,它的每个分组之间相对独立,因此攻击者只需要对调任意分组的密文,在经过解密后,所得的明文顺序也是经过对调的

当需要加密的明文多于一个分组的长度时,应该避免使用ECB模式

密钥管理

密码系统的安全性应该依赖于密钥的复杂性,而不应该依赖于算法的保密性

最常见的密钥保管是将密钥保存在配置文件中或数据库中

伪随机数问题

伪随机数不够随机,比如根据时间戳生成的随机数,会通过暴破而遍历到

生成随机数的核心在于随机种子的设计

解决方法:使用足够安全的随机数

java可以使用SecureRandom

linux可以使用/dev/random或者/dev/urandom来生成随机数

PHP5.3.0及之后可以使用函数生成

 

 

 

Web框架安全

 

MVC框架安全

将安全工作放在该在的地方

模板引擎和XSS防御

Web框架和CSRF防御

区分读操作和写操作,根据操作不同选择不同的HTTP请求方式

HTTP Headers管理

编码所有的\r\n对抗CRLF

 

返回号是30X的HTTP Response,浏览器将会跳转到Location指定的URL

 

管理好跳转目的地址

 

在web框架提供统一的跳转函数(白名单)

控制HTTP的Location字段,限制Location的值只能是哪些地址(白名单)(白名单YYDS)

HTTP Only防止token盗用

数据持久层和SQL注入

使用ORM框架,简化预编译开发

 

应用层拒绝服务攻击

DDOS

DDOS又称为分布式拒绝服务,DDOS本身指利用合理的请求造成资源过载,导致服务不可用。分布式拒绝服务攻击将正常的请求放大了若干倍,通过多个节点同时发起攻击,达成规模效应。

常见的DDOS攻击有SYN flood,UDP flood,ICMP flood等。

 

三次握手的缺陷

(1)客户端向服务器端发送一个SYN包,包含客户端使用的端口号和初始序列号x

(2)服务器端收到客户端发送来的SYN包后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号x+1和服务器端的初始序列号y

(3)客户端收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号为y+1、序号为x+1的ACK报文,一个标准的TCP连接完成。而SYN flood在攻击时,首先伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器端会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3~5次并且等待一个SYN Time(一般为30秒至2分钟),如果超时则丢弃这个连接。攻击者大量发送这种伪造源地址的SYN 请求,服务器端将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断地对这些IP进行SYN+ACK重试。最后的结果是服务器无暇理睬正常的连接请求,导致拒绝服务。

 

应用层DDOS

CC攻击

CC攻击指的是对一些消耗资源较大的应用页面不断发起正常的请求,以达到小号服务端资源的目的。

黑客入侵一个流量很大的网站,通过篡改页面,将巨大的用户流量分流到目标网站,导致目标网站拒绝服务

防御措施

限制请求频率,当客户端的请求在一定时间内过于频繁,就重定向到一个出错页面

加入验证码

让客户端解析一段JavaScript,并给出正确的运行结果

资源耗尽攻击

Slowloris攻击

以极低的速度往服务器发送HTTP请求,由于Web Server对于并发的链接数都有一定的上限,因此当Web Server的所有链接都被恶意链接占用,从而无法接受新的请求,就会导致拒绝服务

HTTP POST DOS

原理是在发送HTTP POST包时,指定一个非常大的Content-Length的值,然后以很低的速度发包。这种攻击的本质是针对Apache的MaxClients限制的

Server Limit DOS

通过XSS生成一个非常长的token,导致该token对应域下的请求都被拒绝

ReDOS

由于正则表达式书写的问题,导致在解析一些数据时消耗时间特别长

 

 

php安全

 

文件包含漏洞

使用方法

include()

require()

include_once()

require_once()

 

<?php include($_GET[test]);?> #这意味着引用同目录下的test变量文件为php代码

原理

使用了这四个函数去包含一个新文件时,这个文件都会以PHP代码进行执行,PHP内核并不会在意该被包含的文件是什么类型。所以如果被包含的是txt文件、jpg文件、远程url,也都会当成PHP进行执行

 

远程文件包含

如果php配置文件的allow_url_include为ON则include/require

 

文件包含使用方法

记一次文件包含

 

远程文件包含使用方法

记一次远程文件包含

 

变量覆盖漏洞

当php.ini的register_globals=on时会出现PHP中的代码变量会被cookie、表单中的变量赋值的情况

 

实现

记一次变量覆盖漏洞

 

 

Web Server配置安全

 

Apache安全

默认启动的Module出现的高危漏洞非常少,大多数的高危漏洞集中在默认没有安装或enable的Module上

因此,检查Apache安全的第一件事情就是检查Apache的Module安装情况,根据“最小权限原则”,应该尽可能地减少不必要的Module,对于要使用的Module,则检查其对应版本是否已经存在已知的安全漏洞。

 

使用root或者是admin权限运行Apache的结果可能是灾难性的

黑客入侵Web成功时,直接获得高权限的Shell

应用程序将获得高权限,如果出现bug时会导致可能会删除本地文件、杀死进程等不可预知的结果

保护好Apache Log

 

Nginx安全

Nginx的配置非常灵活,在对抗DDOS和CC攻击方面也能得到一定的缓和

 

posted @ 2023-01-10 21:34  gvpn  阅读(461)  评论(0编辑  收藏  举报