清理 PHP/SQL $_POST、$_GET 等...?

2023-12-01

好吧,这个主题是一个温床,我明白这一点。我还了解这种情况取决于您使用的代码。我有三种情况需要解决。

  1. 我有一个表格,我们需要允许人们使用逗号、波形符等发表评论和声明……但仍然免受攻击。

  2. 我有人用英语输入这样的日期:10/13/11 mm/dd/yy,可以清理吗?

  3. 我如何理解如何使用htmlspecialchars(), htmlentities() and real_escape_string()正确吗?我已经阅读了 php.net 网站和这里的一些帖子,但在我看来,这一切都取决于阅读问题的人的正确答案是什么。

我真的无法接受......必须有一个答案,其中可以净化与我在这里发布的文本格式类似的文本格式。我想知道这是否可能以及如何可能。

谢谢...因为在我看来,当在其他地方问这个问题时,它往往会让人烦恼...我正在学习我需要知道的东西,但我认为我已经在没有示例的情况下达到了我所能知道的水平它的目的是...

提前致谢。


这是一个非常重要的问题,实际上以编码的形式有一个简单的答案。您面临的问题是您同时使用多种语言。首先使用 HTML,然后使用 PHP,几秒钟后使用 SQL。所有这些语言都有自己的语法规则。

要记住的是:字符串应该始终采用正确的编码。

让我们举个例子。您有一个 HTML 表单,用户在其中输入以下字符串:

I really <3 dogs & cats ;')

按下提交按钮后,该字符串将被发送到您的 PHP 脚本。假设这是通过 GET 完成的。它被附加到 URL,该 URL 有自己的语法(例如 & 字符具有特殊含义),因此我们正在更改语言。这意味着必须将字符串转换为正确的 URL 编码。在这种情况下,浏览器会执行此操作,但 PHP 也有一个urlencode的功能。

在 PHP 脚本中,字符串存储在$_GET,编码为 PHP 字符串。只要您编写 PHP 代码,就完全没问题。但现在让我们将该字符串用于 SQL 查询。我们改变了语言和语法规则,因此字符串必须通过以下方式编码为 SQL:mysql_real_escape_string功能。

在另一端,我们可能想再次将字符串显示给用户。我们从数据库中检索该字符串,并将其作为 PHP 字符串返回给我们。当我们想要将其嵌入 HTML 中进行输出时,我们再次更改语言,因此我们必须通过以下方式将字符串编码为 HTML:htmlspecialchars功能。

在整个过程中,字符串始终采用正确的编码,这意味着用户可以想到的任何字符都将得到相应的处理。一切都应该顺利且安全地进行。

要避免的一件事(有时无知的人甚至会建议这样做)是过早地对字符串进行编码。例如,您可以申请htmlspecialchars到字符串before将其放入数据库中。这样,当您稍后从数据库检索字符串时,您可以将其粘贴到 HTML 中,没有问题。听起来不错?是的,真的很棒,直到您开始收到人们的支持票,他们想知道为什么他们的 PDF 收据充满了&amp; &gt; junk.

In code:

表单.html:

<form action="post.php" method="get">
    <textarea name="comment">
        I really <3 dogs &amp; cats ;')
    </textarea>
    <input type="submit"/>
</form>

它生成的 URL:

http://www.example.org/form.php?comment=I%20really%20%3C3%20dogs%20&amp;%20cats%20;')

帖子.php:

// Connect to database, etc....

// Place the new comment in the database
$comment = $_GET['comment']; // Comment is encoded as PHP string

// Using $comment in a SQL query, need to encode the string to SQL first!
$query = "INSERT INTO posts SET comment='". mysql_real_escape_string($comment) ."'";
mysql_query($query);

// Get list of comments from the database
$query = "SELECT comment FROM posts";

print '<html><body><h2>Posts</h2>';
print '<table>';

while($post = mysql_fetch_assoc($query)) {
    // Going from PHP string to HTML, need to encode!
    print '<tr><td>'. htmlspecialchars($post['comment']) .'</td></tr>';
}

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

清理 PHP/SQL $_POST、$_GET 等...? 的相关文章

随机推荐

  • tsc 未被识别为内部或外部命令

    我在 Windows7 上使用节点版本 6 9 2 和 npm 版本 5 4 2 我已经使用命令安装了打字稿npm install typescript g 但是 当我使用命令运行演示文件时 tsc 我收到错误 tsc is not rec
  • 绕过浏览文件/上传文件对话框

    我正在构建一个供内部使用的 Chrome 扩展程序 第一步 用户可以上传文件 这是always同一个文件 我想跳过浏览对话框并直接为输入字段分配正确的值 该文件与插件代码分开 这可以通过 Javascript 实现 或者开发 Chrome
  • HTML5 缓存清单:将所有远程资源列入白名单?

    我正在制作一个包含博客的 iPhone 版桌面网站 该博客经常嵌入来自其他域的图像 显然 在这种情况下 图像 URL 始终以 http 开头 但由于我使用的是缓存清单 因此不会加载这些图像 因为它们未在清单文件 我有一个网络 白名单部分 其
  • 批处理文件:在for循环中转义问号

    这个 for 循环 简化的最小示例 echo off for a in help help help help do echo a 用 扼住 2 个元素特点 它输出 C Temp gt test bat help help help hel
  • 如何使 UICollectionView 单元格水平居中?

    我做了一些研究 但我找不到任何关于如何将 UICollectionView 中的单元格水平居中的代码示例 而不是第一个单元格是这样的X00 我希望它是这样的0X0 有什么办法可以做到这一点吗 EDIT 可视化我想要的东西 当 Collect
  • 如何将我的 Swift 代码转换回 2.3

    我下载了 XCode Beta 8 并将所有 swift 代码从 Swift 2 3 转换为 Swift 3 它给我带来了太多问题 并导致我开始了一个我已经工作了大约 4 个月的项目 如何将我的代码从 Swift 3 转换回 Swift 2
  • 方括号在 C 中如何工作?

    我刚刚开始学习 C 我正在尝试了解基础知识 很多教程会告诉你一些事情 让你相信它 而无需任何真正的解释 而且我找不到人类可读的答案 在下面的 include
  • C# 中按特定精度向下舍入

    我怎样才能舍入double由特定的precision 我需要一个函数来获取double并返回最接近该 double 的值 该值是该特定的倍数precision并且低于两倍 例如 如果精度 2 5 9 3 gt 7 5 12 5 gt 12
  • 使用 NameValueCollection 的 WCF 序列化问题

    我正在尝试通过 WCF 序列化 NameValueCollection 我不断收到异常告诉我添加一种又一种类型 添加它们后 我终于得到了 类型 System Object 无法添加到已知类型列表 因为另一个类型 System Collect
  • 为什么 JavaScript 中的函数是对象?

    请向我解释一下为什么函数是 javascript 中的对象 对象是具有属性的结构 属性的值可以是一个函数 我们称这个属性为方法 但我们不能执行一个对象 我们不能这样做 var cat name Murzik age 17 cat 但我们可以
  • Swift 3 - 准备 Segue

    我的故事板中有 3 个场景 我的初始视图控制器是一个导航控制器 然后根视图控制器与 UI ViewController 视图控制器 a 有一个关系 然后我有一个从 ViewController 中的按钮到第三个 ViewController
  • 上传base64图像facebook graph api 如何使用这个脚本

    上传 Base64 图像 Facebook Graph API我想使用附加链接的这个脚本 如何在我的 WordPress 帖子中使用它 我想用它作为 Facebook 封面照片网站 看看我从各种示例中拼凑而成的代码 您可以使用它将纯 bas
  • 使用 Excel VBA 抓取 HTML

    我一直在尝试抓取并解析网站上的一些财务数据 以便我可以使用 VBA 将数据添加到 Excel 电子表格中 我找到了几种可能的解决方案 但我似乎无法让它们适合我的参数 我的问题是我只需要表中的一个变量 平均目标价格 我一直无法弄清楚我做错了什
  • 将 SQLite 数据库中存储的经度和纬度数据导出到文件以便可以通过网站导入到 Google Map API 的最简单方法是什么?

    我创建了一个应用程序 它在 SQLite 数据库中记录一系列经度和纬度值 并将它们显示为 MapActivity 上的彩色轨迹 我现在希望能够以某种方式导出这些数据 最好导出到文件 以便用户可以将这些值上传到显示 Google Map AP
  • php在上传时调整图像大小

    我得到了一个表单 用户可以在其中插入一些数据并上传图像 为了处理图像 我得到了以下代码 define MAX SIZE 10000 errors 0 image FILES fileField name uploadedfile FILES
  • 请求库:cx_Freeze 后缺少 SSL 握手证书文件

    我正在 python 3 3 中构建一个使用 requests 库的应用程序 当我尝试获取带有 SSL 连接的 URL 时 我想使用 verify true 来验证它 当运行我的 python 脚本时 这非常有效 当我冻结相同的脚本时 它会
  • Uploadify + Paperclip + Rails 嵌套关联 before_save

    我需要创建一个模特申请表 模特可以在其中填写并添加图片 我正在使用 Uploadify Paperclip 和 Rails 3 方法来遵循这个示例 https github com websymphony Rails3 Paperclip
  • 当不存在符号信息时,如何使用 GDB 为 x86 程序集设置断点? [复制]

    这个问题在这里已经有答案了 当没有符号信息时 即无法编写时 如何使用 GDB 对 x86 汇编代码设置断点b start 我想立即停止执行 但是写b 0不是很有用 因为这会在地址处停止执行0 但我需要在地址处中断执行x相对于起点 当不存在符
  • 如何在 LongListSelector 中突出显示所选项目

    我想简单地在 LongListSelector 中当前选定的项目周围显示边框 我已经为 LongListSelector 设置了 ItemTemplate 但我不确定如何修改边框 以便只有当前选定的项目包含边框 主页 xaml
  • 清理 PHP/SQL $_POST、$_GET 等...?

    好吧 这个主题是一个温床 我明白这一点 我还了解这种情况取决于您使用的代码 我有三种情况需要解决 我有一个表格 我们需要允许人们使用逗号 波形符等发表评论和声明 但仍然免受攻击 我有人用英语输入这样的日期 10 13 11 mm dd yy