在 PHP Web 应用程序中防止 XSS 的最佳实践

Cross-Site Scripting 是一种安全漏洞,通常发生在 Web 应用程序中,通常缩写为 XSS。如果您想知道,我们不使用缩写 CSS,因为我们在设计网页时已经将它用于级联样式表。由于 Web 浏览器的安全漏洞,XSS 最初被称为跨站点。使用 XSS,如果您在浏览器中打开了两个站点的窗口,则可以将信息/数据从一个站点传输到另一个站点。 
 

在本文中,我将向您介绍有关 XSS 的详细信息以及如何防止对您的 Web 应用程序进行 PHP XSS 攻击。

XSS 通常使用 Web 表单或超链接通过网页插入。此代码可以通过任何客户端语言使用,例如 JavaScript、PHP、HTML、VBScript。 

如今,鉴于过去 XSS 漏洞的猖獗,浏览器考虑到安全性,通常不允许信息从一个浏览器屏幕跳转到另一个浏览器屏幕。对 PHP 应用程序中的 XSS 攻击示例有完整的认识和知识也很重要,以便能够及时设置预防措施。 

XSS 漏洞的类型

XSS 攻击主要有 3 种类型。

  1. 存储型 XSS 
  2. 反射型 XSS
  3. 基于 Dom 的 XSS(文档对象模型)

存储型 XSS

存储的跨站点脚本 [XSS] 是一种非常危险的跨站点脚本形式。允许用户在数据库中存储数据的 Web 应用程序可能会受到此类攻击。

当 XSS 攻击者将恶意代码注入网站并将代码保存到数据库时,就会发生存储型 XSS。稍后,当网络用户访问该页面时,他可能会在不知不觉中检索该文件,因此脚本将在用户的浏览器中运行。

每当客户端向服务器发送HTTP请求,服务器发送HTTP响应恶意代码,因为恶意代码保存在数据库中,它会伤害客户端。这种攻击的严重性非常高。

反射型 XSS

这是一种跨站点脚本,攻击者在其中使用网站上的任何表单字段注入一些 JavaScript 代码。任何添加到浏览器的脚本都不会影响任何其他用户,否则任何其他用户都会受到伤害。

以任何搜索引擎(谷歌、必应)为例。您可以输入查询并搜索任何信息,但是如果您可以在输入字段中添加脚本并且脚本将执行任何功能会发生什么?也许它需要用户的凭据,它需要 cookie 信息。如果您拥有与任何其他用户类似的 cookie,您可以在浏览器中访问他们的所有数据,因为您在恶意搜索框中进行了搜索。

基于 DOM 的 XSS

DOM 代表文档对象模型。在这种类型的攻击中,攻击者通过任何输入字段将 JavaScript 代码注入 HTML DOM。 

DOM XSS 与存储和反射型 XSS 没有太大区别,后者可以注入脚本,在后台执行有效负载并对 DOM 注册进行进一步更改。这是在客户端完成的,因此它不会寻找服务器响应,因此很容易执行 DOM XSS。 

当恶意脚本被传递到 URL 并且客户端脚本读取它以修改 DOM 时,可能会发生这种情况。

那么现在的问题是我们如何区分普通 XSS 和 DOM XSS?唯一的区别是负载不会反映在 Web 应用程序的源代码中。

XSS 背后的原因

由于网站应用程序开发中的错误,XSS 通常很容易执行和创建。这使得攻击者很容易利用,因为一旦攻击者了解到应用程序的弱点,只需将一些 JavaScript 或其他代码粘贴到输入文本区域中就相对容易。毕竟,为什么不呢?它运行代码。它运行错误的代码。这不是任何人的错,但 Web 开发人员的代码甚至一开始就被允许提交。 

在创建带有输入字段的网页时,您应该考虑数据验证或限制。

XSS 可能造成的损失

XSS 允许攻击者将一系列恶意脚本插入网站,然后他们可以使用这些脚本窃取用户的 cookie,甚至访问他们的登录凭据、信用卡详细信息或任何有用的信息。

跨站点脚本创建的风险比您预期的要高,因为它不仅允许攻击者获取用户数据和信息,这是许多其他漏洞在此攻击中旨在实现的:使用 XSS 有一个附加功能: 攻击者在网站上犯下这些罪行,在用户看来,这些网站应该是完全值得信赖的,所以他们不必担心这种盗窃行为的发生,也不必考虑戴上眼罩。

如何防止 PHP XSS 攻击

您可以为 PHP 应用程序上的 XSS 保护做几件事。你能做的最好的事情之一就是确保你知道你在点击什么。不要点击收件箱中的未知链接,也不要点击短信或社交帐户收件箱中收到的链接。 

始终知道该链接会将您带到哪里(检查 URL 中的路径)。您可能需要考虑从输入字段中禁用脚本,或者确保在点击提交之前验证输入。最终用户应该无法在您的应用中保存脚本或安装脚本。如果你能阻止代码被执行,那么你就知道站点脚本攻击是行不通的。

确保您的网络浏览器和其他基于网络的应用程序在您的系统上保持更新。由于许多旧版浏览器存在允许站点访问 XSS 脚本的漏洞,因此您必须更新浏览器以确保您领先于最新的可能错误和漏洞。

在 PHP 中防止 XSS

以下是我们可以在 Web 应用程序中防止 XSS 的一些方法 -

  • htmlspecialchars — 将特殊字符转换为 HTML 实体。这是防止 XSS 的著名方法之一:
    • < (小于) <
    • (大于)>
    • &(和号)&
  • Strip_tags — 从字符串中去除 HTML 和 PHP 标记。此函数尝试返回一个字符串,其中包含从给定字符串中删除的所有 NULL 字节、HTML 和 PHP 标记。
  • Style-src — 限制 CSS 文件的来源。
  • Connect-src — 指令限制可以使用脚本接口加载的 URL。这有助于防范 PHP 应用程序上的跨站点脚本攻击 (XSS),

第三方 PHP 库

还有第三方PHP 库可以帮助预防 XSS。下面列出了其中一些:

  • PHP 反 XSS
  • HTML 净化器
  • 合法的

其中,PHP Purifier 经常维护和更新。一旦开发人员具备基本的 PHP 知识,使用起来就非常简单。

结论

跨站点脚本是一种通用攻击。它可用于窃取非常敏感的信息,例如用户凭据、cookie 和具有商业价值的数据。 

我们应该尽量不要插入用户控制的数据,除非应用程序明确需要它才能运行。 评论可能是用户可以输入导致恶意 XSS 的脚本的最佳示例。 

部署 PHP Web 应用程序之前,尝试创建一些测试用例并对您的 Web 应用程序执行一些渗透测试,以查找和修复攻击者可能在您的应用程序中利用的PHP 安全漏洞。

如果您需要我添加任何其他 PHP XSS 预防技巧,请在下面的评论部分告诉我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值