手机版

解析web文件时常见的安全漏洞(目录和文件名检测中的漏洞)

时间:2021-11-18 来源:互联网 编辑:宝哥软件园 浏览:

在做web开发的时候,我们经常会做代码演练,很多时候会抽查一些有漏洞的核心功能或者逻辑。随着技术团队的发展,团队成员的技术也越来越成熟。常见的愚蠢的SQL注入漏洞和XSS漏洞。会越来越少,但我们也会发现,一些新兴的隐藏漏洞也会偶尔出现。这些漏洞更多的是来自开发人员留下的问题,比如一个函数和公共模块函数的设计不充分。在过去,我们能够完成一些功能模块,但现在的要求是以安全和正确的方式完成模块。接下来,我将分享一些常见的功能模块,由于设计原因,这些模块容易受到攻击。接下来,我们来看看读取文件函数的漏洞。让我们看看下面的代码。用户输入不同的目录并包含不同的文件。代码如下:Php///读取模块名$mod=isset($_GET['m'])?trim($ _ GET[' m ']): ' index ';///过滤目录名,不要跳转到父目录$mod=str_replace(' . ','.',$ mod);///获取文件$ file='/home/www/blog/'。$ mod。PHP ';///include file @ include($ file);这个代码可能在很多朋友做的程序中遇到过。对于新人来说,也很容易出现这样的问题。我记得当我遇到这段代码时,我问,在代码安全性方面你能做什么?回答:1。“.”目录已被替换,因此.用户传入的模块名称中的目录将被替换。2.构造拼接文件的名称,受上一个目录和扩展名限制,包含的文件将限于这个目录。这段代码真的能检查目录安全性吗?让我们测试一下如果$mod通过这个值会发生什么。image

$mod是通过构造输入的?mod=…/…/…/…/etc/passwd

实际包含("/etc/passwd ")文件。你是怎么逃脱我的参数限制的?首先,通过做参数过滤类型来限制用户输入不是一个好办法。一般规则是:如果你能做测试,就不要更换。如果考试不及格,直接通过!这是我们的原则之一。过滤失败的例子不胜枚举。让我们看看实际的过程。1.输入"././."并替换“.”带“.”2.结果是”././,它变成了这个。有的朋友会说“如果我直接换成空格会不会很好?”?这个可以换。但并不意味着以后要用空格代替。再举一个例子。例如,有人替换字符串中的javascript。代码如下:复制代码如下:…$ msg=str _ replace(" JavaScript ",",$ msg);好像不会出现javascript,但是如果改为输入:jjavascriptavascript,中间的会被替换,变成空的。前面的“j”将形成一个新的javascript。其次,让我们看看如何逃避以后。php限制。用户输入的参数为:“etc/passwd\0”,字符\0非常特殊。连接后,文件名变为“.etc/passwd \ 0.php”,打印此变量时仍然正确。但是,如果将一个段落放入文件读写操作方法中,它将在\0之后被自动截断。操作系统,只能读取……etc/passwd文件。”\0”将出现在所有文件系统读写文件变量中。会得到同样的待遇。这种C语言\0是作为一个字符串的完整标记相关联的。通过上面的分析,我们发现在做文件类型操作的时候,如果我们不注意,就会出现很大的漏洞。此外,此漏洞可能会导致一系列安全问题。如何做文件类操作?此时,估计会有人想到这一点。做文件读写操作时,如果路径中有变量,怎么办?有人会说,置换可以吗?”是的”,但这种方法并不严格,而且会出现很多问题。而且,很难杜绝第一次写作的朋友。做正确的事,选择正确的方法,会结束问题本身。在这里,我建议:对变量做白名单限制。1.白名单限制复制码是什么?代码如下:$mod=isset($_GET['m'])?trim($ _ GET[' m ']): ' index ';///读取模块名称后,mod变量值的范围为枚举类型:if(!in_array($mod,array('user ',' index ',' add ',' edit '))exit(' err! ');完全限定$mod,只在这个阵中,够狠!2.如何限制白名单?通过刚才的例子,我们知道如果是枚举类型,可以直接把值放在列表中,但是有时候不够。我们有另一个白名单限制方法。即限定字符范围的复制码如下:例如:$mod=isset($_GET['m'])?trim($ _ GET[' m ']): ' index ';///读完模块名,我限制知道$mod是一个目录名,意思是一般站点带下划线的字母和数字。if(!preg_match("/^\w $/,$mod))退出(' err! ');字符只能是:[A-Za-z0-9_]。够辛苦了!总结:你有没有发现白名单限制法其实做起来很简单?如果你知道那个地方想要什么,输入检测一定是那些。此外,检测你所知道的比替换那些未知的字符要简单得多。好吧,我们先来这里。问题的正确解决将使文件变得简单和安全!

版权声明:解析web文件时常见的安全漏洞(目录和文件名检测中的漏洞)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。