5种PHP安全问题以及您可以做些什么

PHP已经发展成为最流行的编程语言,并被广泛用于动态网站的快速开发。由于Web服务器可以公开访问,因此它们存在重大的安全漏洞。下面提到的饼图由Web Hacking Incident Database for 2013(WHID)创建,它清楚地显示了最受欢迎的劫机者的不同攻击方法。

在本文中,我描述了PHP Web应用程序中发现的一些最常见的漏洞区域,以及如何管理和阻止它们的建议。通过向您展示缺陷的含义,以及每个特定缺陷如何被利用,我希望您不仅要了解如何避免这些特定错误,还要了解它们导致安全漏洞的原因。

SQL注入

  • 概观

SQL注入是最常见的黑客攻击类型之一,它专门针对链接到数据库并与数据库交互的数据库驱动的网站或Web应用程序。此攻击是一种代码注入,攻击者利用站点安全措施中的漏洞向数据库发送特殊的SQL查询,以便对其进行修改,并在最坏的情况下删除整个数据库。

当Web开发人员未能构建网站区域的任何检查或数据验证功能时,就会发生此攻击,其中可以将来自外部源的数据插入到网站中。攻击者将在未受保护的SQL查询中添加自己的SQL语句,这些查询利用用户提交的数据在数据库中查找内容。

例如:

不受保护的声明将是:

SQL注入查询将导致以下尝试:

此处返回的结果为true,因此将显示整个表用户的内容。

[相关文章]

  • 有什么影响?

在这种类型的php安全问题中,攻击者可以访问数据库中的所有信息,包括用户名,名称,密码和其他敏感信息。此外,数据库中的所有信息都可以被更改或删除,这显然会对网站的前端产生可怕的影响,如果攻击者获得管理权限,整个网站就会被破坏。

  • 如何预防?
  • 为了更好地防止此安全问题,必须先验证,验证和清理数据,然后才能进入应用程序;
  • 所有敏感信息(如密码)都应使用SHA1或SHA加密;
  • 技术信息有时可能包含可能揭示攻击者安全漏洞的技术细节; 因此,必须从错误消息中删除它;
  • 攻击者专门查看错误消息以获取数据库名称,用户名和表名等信息,因此,您应该禁用错误消息,或者您可以创建自己的自定义错误消息;
  • 您可以限制授予数据库的权限,减少权限会降低攻击机会;
  • 您可以使用存储过程和先前定义的游标来抽象数据访问,以便用户不直接访问表或视图;
  • 您可以防止将诸如“insert”,“update”,“drop”和“union”之类的单词添加到数据库中(这些都是可以更改表和数据库的单词)。

 

远程文件包含和远程执行代码

  • 概观

此安全漏洞允许恶意或未知方在您的Web服务器或客户端上运行代码,并且可能导致其他几种类型的黑客攻击。远程文件包含是由站点漏洞引起的,该漏洞允许黑客将恶意文件部署到Web服务器上。当register_globals指令(一个控制超全局变量可用性的设置)为ON(允许用户远程初始化变量)时,这可能是由于不正确使用require()和include()函数引起的。如果此指令为ON,则可以使用未初始化的变量来包含来自远程位置的恶意或不需要的文件,如果在php.ini中启用了allow_url_fopen,则可以通过FTPHTTP从远程文件将远程文件上载到站点的服务器地点。

  • 有什么影响?

远程文件包含会导致服务器上的远程代码执行,数据被盗以及客户端的代码执行,从而导致跨站点脚本和拒绝服务(DoS)等问题。服务器端的远程代码执行意味着如果黑客所包含的文件是shell(可能影响操作系统的文件),那么黑客可以在服务器上运行系统级代码并使用它来改变或检索该Web服务器上的数据或破解最终用户的终端。客户端远程代码执行导致跨站点脚本。拒绝服务(DoS)阻止网站用户通过阻止服务器提供网页来访问该网站,或者它可能使服务器因服务速度变慢而使服务器超载,从而使网站无法访问。

  • 如何预防?
  • 您应该关闭register_globals指令,在PHP的更高版本中,默认情况下它是OFF,但是应该始终检查它。如果由于某种原因必须将指令设置为ON,则必须正确初始化所有变量。
  • 还有其他PHP指令可用于防止此安全漏洞,其中包括:
    • allow_url_fopen(默认情况下设置为on)控制远程文件是否应该是可包含的并且应该关闭
    • allow_url_include(默认情况下设置为off)控制include_once(),include(),require()和require_once()命令是否能够将远程文件包含到代码中
    • 启用safe_mode,强制PHP在打开任何文件之前测试用户ID权限
  • 始终验证用户输入,并对从远程服务器或位置检索的任何数据非常小心。为了阻止它,您可以确保所有包含文件都是本地托管的,除非绝对必要,否则永远不会接受来自其他任何地方的文件
  • 将用户权限限制到绝对最小值也可以帮助防止此安全威胁

 

跨站点脚本(XSS)

  • 概观

Cross Site Scripting可能是最常见的黑客攻击形式,也是此类型; 黑客利用合法网站的漏洞迫使该网站做某些事情。在这次攻击中,黑客用他的恶意客户端脚本感染网页,当用户访问此页面时,脚本会下载到他的浏览器并执行。XSS攻击的模式如下图所示:

跨站点脚本(XSS)

 

  • 有什么影响?

一旦注入,恶意代码就会存储在站点的数据库中,当它显示给访问者时,生成的页面可能会失真,并且还可以运行代码来窃取cookie,或者将会话ID等重要信息发送给恶意的第三方 – 派对网站。如果将JavaScript注入到HTML源代码中,那么它也可用于诸如将用户重定向到垃圾邮件网站或更复杂的攻击(如键盘记录)(将用户的击键发送到外部数据库)。

XSS还用于用户帐户黑客攻击和窃取用户的机密信息。与XSS结合使用的方法称为跨站点请求伪造。这就是恶意代码欺骗用户浏览器以合法用户为幌子发送请求的地方,例如,它可以使用用户的在线电子邮件帐户自动发送电子邮件。

  • 如何预防?
  • 防止XSS的最好方法是使用转义函数,特别是转义包含HTML和JavaScript语法的字符,如’>’和'<‘,或将这些转换为HTML实体,(例如<将成为<);
  • 在论坛网站中,用户想要像链接一样发布HTML,可以使用替代语法,如bbcodes(在论坛上非常常见),以克服HTML字符的转义;
  • htmlspecialchars()函数识别您不想成为HTML输出的任何输出,并将其转换为纯HTML实体,例如:’&’变为’&’,”’(双引号)变为”’;
  • 您应该在启动之前严格测试网站。

 

会话和Cookie黑客攻击

  • 概观

会话和cookie黑客攻击不能破坏数据库或Web应用程序本身,但它可能会破坏用户帐户。会话是当用户发起与web服务器的联系时触发的实体,并且包括用户和web应用之间的一段时间的交互,其可以使用诸如用户名和密码的安全措施来认证。在此会话期间,Web应用程序在用户的浏览器上存储cookie或文件,其中包含有关会话的信息,如用户的首选项,身份验证数据,唯一代码或购物车信息。

会话和Cookie黑客攻击

 

  • 有什么影响?

当用户登录网站时,会创建会话ID,会话黑客会尝试获取合法用户的会话ID并使用该信息进行不公平的处理。当黑客试图重用会话ID时,它被称为会话固定,它可以允许黑客以真实用户身份登录并导致更改或损坏用户的帐户,这在用户是管理员或其管理员或其人时特别危险帐户包含重要或敏感数据。

  • 如何预防?
  • 为了防止黑客在登录前设置会话ID,应经常更改ID,因此,每次用户登录时都应使用session_regenerate_id()函数,为其分配新的ID;
  • 通过重新验证即将执行重要或敏感任务(例如重置密码)的用户(即通过重新输入旧密码),可以减轻此黑客攻击的风险;
  • 如果要将用户的密码存储在会话变量中,则必须对其进行加密(使用sha1()函数)
  • 如果您的Web应用程序正在处理敏感信息,如借记卡和信用卡号,那么使用SSL或任何其他安全连接也可以防止会话和cookie黑客攻击

 

目录遍历(又名路径遍历)

  • 概观

目录遍历是一种通过访问文档根目录之外的文件来利用Web应用程序的方法,该文件允许攻击者通过执行命令查看受限文件并与Web服务器交互。这种攻击是通过浏览器发生的,是由黑客在地址栏中输入URL将其从根目录带到主服务器目录中完成的。这通常需要一些黑客的猜测,但实际上可以很容易地完成。攻击也可以通过Web应用程序前端的输入门户来完成。

  • 有什么影响?

一旦进入服务器的系统文件夹和文件,攻击者就可以访问各种信息和敏感数据,包括应用程序源代码和关键系统文件。黑客甚至可能删除或添加文件并对服务器的设置造成严重破坏。

  • 如何预防?
  • 您应该通过删除所有可疑数据并过滤掉元字符来正确验证和清理所有用户输入;
  • 此黑客行为的另一个预防措施是永远不要将敏感配置文件存储在Web根目录中;
  • 如果对文件发出了可疑请求,则应建立完整的文件路径,并且应该对路径中的所有字符进行规范化(例如,将%20更改为空格);
  • 在Web服务器上进行仔细编程非常重要,您应该使用安全软件,补丁和漏洞扫描程序。

如果有不懂的地方请留言,SKY8G网站编辑者专注于研究IT源代码研究与开发。希望你下次光临,你的认可和留言是对我们最大的支持,谢谢!

上一篇: 5种方式增强现实正在破坏客户体验

下一篇: PHP将多个连续空格减少到一个空格

登录 评论
avatar