PHP 和 mySQL:什么时候使用 htmlentities?

2024-03-15

平台:PHP 和 MySQL

出于实验目的,我自己在自己的网站上尝试了一些 XSS 注入。考虑这种情况,我有表单文本区域输入。由于这是一个文本区域,我可以输入文本和各种(英语)字符。以下是我的观察:

A)。如果我在将数据插入数据库之前仅应用 strip_tags 和 mysql_real_escape_string 并且不在输入中使用 htmlentities,查询正在中断由于异常终止,我遇到了显示我的表结构的错误。

B)。如果我在将数据插入数据库之前在输入上应用 strip_tags、mysql_real_escape_string 和 htmlentities,查询没有中断我能够成功地将数据从文本区域插入到我的数据库中。

所以我确实明白必须不惜一切代价使用 htmentities,但不确定何时应该使用它。考虑到上述情况,我想知道:

  1. 到底什么时候应该使用 htmlentities?是否应该在将数据插入数据库之前使用它,或者以某种方式将数据放入数据库,然后在我尝试显示数据库中的数据时应用 htmlentities?

  2. 如果我遵循上面 B) 点中描述的方法(我认为在我的情况下这是最明显和最有效的解决方案),当我尝试显示来自数据库的数据时,我是否仍然需要应用 htmlentities?如果是这样,为什么?如果没有,为什么不呢?我问这个问题是因为在我看完这篇文章后,这对我来说真的很困惑:http://shiflett.org/blog/2005/dec/google-xss-example http://shiflett.org/blog/2005/dec/google-xss-example

  3. 然后还有一个 PHP 函数,名为:html_entity_decode。当 htmlentities 应用于我的输入时,我可以使用它来显示来自数据库的数据(在按照 B 点所示的程序进行操作之后)吗?我应该选择哪一个:html_entity_decode 和 htmlentities?何时?

预览页面:

我认为在这里添加一些特定情况的更具体细节可能会有所帮助。考虑有一个“预览”页面。现在,当我从文本区域提交输入时,预览页面会接收输入并显示 html,同时隐藏的输入会收集该输入。当点击预览按钮上的提交按钮时,来自隐藏输入的数据将被 POST 到新页面,并且该页面将隐藏输入中包含的数据插入到数据库中。如果我在最初提交表单时不应用 htmlentities(但仅应用 strip_tags 和 mysql_real_escape_string)并且文本区域中存在恶意输入,则隐藏输入将被破坏,并且隐藏输入的最后几个字符明显被视为" />在页面上,这是不可取的。因此,请记住这一点,我需要采取一些措施来在预览页面上正确保留隐藏输入的完整性,同时收集隐藏输入中的数据,以免破坏它。我该怎么办?对于延迟发布此信息表示歉意。

先感谢您。


这是一般的经验法则。

转义变量最后可能的时刻.

您希望变量能够清晰地表示数据。也就是说,如果您尝试存储名为“O'Brien”的人的姓氏,那么您肯定会这样做don't想要这些:

O'Brien
O\'Brien

.. 因为,好吧,那不是他的名字:里面没有&符号或斜杠。当您获取该变量并将其输出到特定上下文中时(例如:插入 SQL 查询或打印到 HTML 页面),that就是当你修改它的时候。

$name = "O'Brien";

$sql = "SELECT * FROM people "
     . "WHERE lastname = '" . mysql_real_escape_string($name) . "'";

$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";

你永远不想拥有htmlentities- 存储在数据库中的编码字符串。当您想要生成 CSV 或 PDF 或任何其他内容时会发生什么isn't HTML?

保持数据干净,并且只针对当前的特定上下文进行转义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 和 mySQL:什么时候使用 htmlentities? 的相关文章

随机推荐

  • Firestore 将值添加到数组字段

    我尝试使用 Firebase 云函数将聊天室的 id 添加到数组字段中的用户文档中 我似乎无法弄清楚写入数组字段类型的方法 这是我的云函数 exports updateMessages functions firestore documen
  • 仅返回 LEFT JOIN 的最新结果[重复]

    这个问题在这里已经有答案了 我正在查询两个表 students2014 和notes2014 中的数据 以便返回学生列表以及每个学生的注释 为此 我使用以下 select 语句 SELECT FROM students2014 LEFT J
  • Qt vtable错误

    我正在浏览旧的 Trolltech Qt 教程 因为我发现它们比新的教程更有帮助 并且undefined reference to vtable当我到达一个实现它自己的信号的类小部件时 我遇到了错误 http doc trolltech c
  • jquery 如何删除第一个 x div 的?

    如果我单击按钮 我会尝试删除前 4 个 div div class test div class 1 div div class 1 div div class 1 div div class 1 div div class 1 div d
  • 在 tkinter 上清除并绘制 matplotlib 图形

    我当前的代码需要一些帮助 我想通过 tkinter 创建一个窗口 并在我之前通过 matplotlib 创建的画布中显示一个绘图 这一点我还没有达到 我的问题是我想通过点击按钮来清除画布 为了清除画布 我想先初始化它 然后才能用绘图填充它
  • 具有通用返回类型但不具有通用输入的方法。这可能吗?

    假设我们有一个NodeData class public class NodeData
  • Facebook 图形 API 响应大小限制(错误代码 1)

    只是分享我在测试我的应用程序时遇到的一些信息 Facebook Graph API 实现了速率限制 如其上所述文档页 https developers facebook com docs graph api advanced rate li
  • 在 C# 中解析 html 的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将绘图添加到 matplotlib 中的给定图形

    我在代码的一部分中创建了一个图形 如下所示 n arange 51 fig3 plt figure plt semilogy n a1mag ro 现在 我想在代码的后面部分向该图添加另一个绘图 有没有办法在绘图时访问Fig3 建议完全保留
  • 将文件上传到 Dropbox 中的特定文件夹

    我使用此示例将文件上传到保管箱 https github com geersch DropboxRESTApi blob master src part 5 README md https github com geersch Dropbo
  • 使用 sha256WithRSAEncryption 进行签名需要什么版本的 OpenSSL

    使用 PHP 5 2 4 和 OpenSSL 0 9 8g 模块我试图创建一个签名摘要 openssl sign stuff signeddigest key sha256WithRSAEncryption 唉 signeddigest 返
  • 如何设置选择标签的选项元素的样式?

    我正在尝试设置一个的风格option in a selectGoogle Chrome 中的下拉菜单 它适用于除 IE9 和 Chrome 之外的所有浏览器 option red background color cc0000 font w
  • Perl regex /o 优化还是错误?

    我正在读perldoc perlre并注意到这句有点有趣的台词 o pretend to optimize your code but actually introduce bugs 我搜索了文档的其余部分 但没有找到对提到的 错误 的另一
  • 如何在 flutter App 上叠加一个小部件?

    我想要一个位于整个应用程序之上的小部件 当我尝试这样做时Overlay of context insert替换该路线后 覆盖层随后会消失 有没有办法在我的应用程序顶部添加一个小部件 即使屏幕稍后弹出 也许存在更优化的方式 但作为一个选项 这
  • 指定输出程序集中 .csdl / .ssdl / .msl 元数据文件的位置

    我有一个 EF 项目 其中包含我已成功使用的数据模型 元数据工件处理 选项设置为 嵌入输出程序集中 由于 edmx 文件位于项目的根文件夹中 EntityConnectionStringBuilder 中使用的元数据字符串设置为 res m
  • 为什么 ::before 伪元素不能与 :visited 伪类一起使用?

    我正在尝试使用伪类和伪元素来设计我的元素 喜欢hover before工作正常但是 visited before不管用 如果链接被访问 我想显示 已看到 但是 visited before不工作 before after box sizin
  • SASS 项目中从右到左 (RTL) 支持

    我想知道是否可以制作一个 mixin 来处理多个参数作为应转换为 rtl 的属性 我想做类似的事情 css selector width 300px height 200px include rtl padding 10px 5px 3px
  • 找不到 Pyspark 模块

    我正在尝试在 Yarn 中执行一个简单的 Pyspark 作业 这是代码 from pyspark import SparkConf SparkContext conf SparkConf setMaster yarn client set
  • Bootstrap 弹出框在 AngularJs ng-repeat 中不起作用

    我有一个国家 地区列表 我正在使用 ng repeat 填充这些国家 地区列表 一切正常 另外 我试图通过使用引导弹出窗口来显示每个国家 地区内的一些其他详细信息 但它似乎不起作用 所以有人可以帮助我吗 网页代码 div class spa
  • PHP 和 mySQL:什么时候使用 htmlentities?

    平台 PHP 和 MySQL 出于实验目的 我自己在自己的网站上尝试了一些 XSS 注入 考虑这种情况 我有表单文本区域输入 由于这是一个文本区域 我可以输入文本和各种 英语 字符 以下是我的观察 A 如果我在将数据插入数据库之前仅应用 s