【解析php安全性问题中的:Null字符问题_PHP教程】教程文章相关的互联网学习教程文章

PHP安全-代码注入

代码注入 一个特别危险的情形是当你试图使用被污染数据作为动态包含的前导部分时: <?phpinclude "{$_GET[path]}/header.inc";?> 在这种情形下攻击者能操纵不只是文件名,还能控制所包含的资源。由于PHP默认不只可以包含文件,还可以包含下面的资源(由配置文件中的allow_url_fopen所控制): <?phpinclude http://www.google.com/;?> include语句在此时会把http://www.gxlcms.com/的网页源代码作为本地文件一样包含进来。...

PHP安全-文件名操纵

文件名操纵 在很多情形下会使用动态包含,此时目录名或文件名中的部分会保存在一个变量中。例如,你可以缓存你的部分动态页来降低你的数据库服务器的负担。 <?phpinclude "/cache/{$_GET[username]}.html";?> 为了让这个漏洞更明显,示例中使用了$_GET。如果你使用了受污染数据时,这个漏洞同样存在。使用$_GET[username]是一个极端的例子,通过它可以把问题看得更清楚。 虽然上面的流程有其优点,但它同时为攻击者提供了一个...

PHP安全-后门URL

后门URL 后门URL是指虽然无需直接调用的资源能直接通过URL访问。例如,下面WEB应用可能向登入用户显示敏感信息: <?php$authenticated = FALSE;$authenticated = check_auth();/* ... */if ($authenticated){include ./sensitive.php;}?> 由于sensitive.php位于网站主目录下,用浏览器能跳过验证机制直接访问到该文件。这是由于在网站主目录下的所有文件都有一个相应的URL地址。在某些情况下,这些脚本可能执行一个重要的操作,这...

PHP安全-源码暴露

源码暴露 关于包含的一个重要问题是源代码的暴露。产生这个问题主要原因是下面的常见情况: l 对包含文件使用.inc的扩展名l 包含文件保存在网站主目录下l Apache未设定.inc文件的类型l Apache的默认文件类型是text/plain 上面情况造成了可以通过URL直接访问包含文件。更糟的是,它们会被作为普通文本处理而不会被PHP所解析,这样你的源代码就会显示在用户的浏览器上(见图5-1)。 图 5-1. 源代码在...

PHP安全-会话劫持

会话劫持 最常见的针对会话的攻击手段是会话劫持。它是所有攻击者可以用来访问其它人的会话的手段的总称。所有这些手段的第一步都是取得一个合法的会话标识来伪装成合法用户,因此保证会话标识不被泄露非常重要。前面几节中关于会话暴露和固定的知识能帮助你保证会话标识只有服务器及合法用户才能知道。 深度防范原则(见第一章)可以用在会话上,当会话标识不幸被攻击者知道的情况下,一些不起眼的安全措施也会提供一些保护。作...

PHP安全-会话固定【图】

会话固定 关于会话,需要关注的主要问题是会话标识的保密性问题。如果它是保密的,就不会存在会话劫持的风险了。通过一个合法的会话标识,一个攻击者可以非常成功地冒充成为你的某一个用户。 一个攻击者可以通过三种方法来取得合法的会话标识: l 猜测l 捕获l 固定 PHP生成的是随机性很强的会话标识,所以被猜测的风险是不存在的。常见的是通过捕获网络通信数据以得到会话标识。为了避免会话标识被捕获的...

PHP安全-表单与数据

表单与数据 在典型的PHP应用开发中,大多数的逻辑涉及数据处理任务,例如确认用户是否成功登录,在购物车中加入商品及处理信用卡交易。 数据可能有无数的来源,做为一个有安全意识的开发者,你需要简单可靠地区分两类数据: l 已过滤数据l 被污染数据 所有你自己设定的数据可信数据,可以认为是已过滤数据。一个你自己设定的数据是任何的硬编码数据,例如下面的email地址数据: $email = chris@exa...

PHP安全-会话数据暴露

会话数据暴露 会话数据常会包含一些个人信息和其它敏感数据。基于这个原因,会话数据的暴露是被普遍关心的问题。一般来说,暴露的范围不会很大,因为会话数据是保存在服务器环境中的,而不是在数据库或文件系统中。因此,会话数据自然不会公开暴露。 使用SSL是一种特别有效的手段,它可以使数据在服务器和客户端之间传送时暴露的可能性降到最低。这对于传送敏感数据的应用来说非常重要。SSL在HTTP之上提供了一个保护层,以使所有...

PHP安全-Cookie盗窃【图】

Cookie 盗窃 因使用Cookie而产生的一个风险是用户的cookie会被攻击者所盗窃。如果会话标识保存在cookie中,cookie的暴露就是一个严重的风险,因为它能导致会话劫持。 图4-2. PHP为你处理相关会话管理的复杂过程最常见的cookie暴露原因是浏览器漏洞和跨站脚本攻击(见第2章)。虽然现在并没有已知的该类浏览器漏洞,但是以往出现过几例,其中最有名的一例同时发生在IE浏览器的4.0,5.0,5.5及6.0版本(这些漏洞都有相应补丁提供)。...

PHP安全-数据的暴露

数据的暴露 关于数据库,另外需要关心的一点是敏感数据的暴露。不管你是否保存了信用卡号,社会保险号,或其它数据,你还是希望确认数据库是安全的。 虽然数据库安全已经超出了本书所讨论的范围(也不是PHP开发者要负责的),但是你可以加密最敏感的数据,这样只要密钥不泄露,数据库的安全问题就不会造成灾难性的后果。(关于加密的详细介绍参见本书附录C) 要看图的话,请至技术文档区下载原版chm 以上就是PHP安全-数据的暴露...

PHP安全-远程文件风险

远程文件风险 PHP有一个配置选项叫allow_url_fopen,该选项默认是有效的。它允许你指向许多类型的资源,并像本地文件一样处理。例如,通过读取URL你可以取得某一个页面的内容(HTML):<?php$contents = file_get_contents(http://example.org/);?> 正如第五章所讨论的那样,当被污染数据用于include和require的文件指向时,会产生严重漏洞。实际上,我认为这种漏洞是PHP应用中最危险的漏洞之一,这是因为它允许攻击者执行任意代...

PHP安全-文件系统跨越

文件系统跨越 无论你用什么方法使用文件,你都要在某个地方指定文件名。在很多情况下,文件名会作为fopen()函数的一个参数,同时其它函数会调用它返回的句柄:<?php$handle = fopen(/path/to/myfile.txt, r);?> 当你把被污染数据作为文件名的一部分时,漏洞就产生了: <?php$handle = fopen("/path/to/{$_GET[filename]}.txt", r);?> 由于在本例中路径和文件名的前后两部分无法由攻击者所操纵,攻击的可能性受到了限制。可是...

PHP安全-SQL注入

SQL 注入 SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞,一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。 对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数...

PHP安全-会话数据暴露(二)

会话数据暴露 当你关注于防止源码的暴露时,你的会话数据只同样存在着风险。在默认情况下,SESSION保存在/tmp目录下。这样做在很多情形下是很方便的,其中之一是所有用户都有对/tmp的写入权限,这样Apache同样也有权限进行写入。虽然其他用户不能直接从shell环境读取这些会话文件,但他们可以写一个简单的脚本来进行读取: <?phpheader(Content-Type: text/plain);session_start();$path = ini_get(session.save_path);$handle =...

PHP安全-源码暴露(二)

源码暴露 你的WEB服务器必须要能够读取你的源确并执行它,这就意味着任意人所写的代码被服务器运行时,它同样可以读取你的源码。在一个共享主机上,最大的风险是由于WEB服务器是共享的,因此其它开发者所写的PHP代码可以读取任意文件。 <?phpheader(Content-Type: text/plain);readfile($_GET[file]);?> 通过在你的源码所在的主机上运行上面脚本,攻击者可以通过把file的值指定为完整的路径和文件名来使WEB服务器读取并显示任何...