在 Web 开发过程中,我将花费多少时间用于用户输入验证?

2024-01-05

我是网络开发新手。到目前为止,我花了很多时间(50% 左右)来尝试阻止坏人将 sql 注入之类的东西放入我的输入表单中并在服务器端验证它。这是正常的吗?


@Jeremy - 一些 PHP 细节

当涉及数据库查询时,请始终尝试使用准备好的参数化查询。这mysqli and PDO图书馆支持这一点。这比使用 mysql_real_escape_string 等转义函数安全得多。

是的,mysql_real_escape_string 实际上只是一个字符串转义函数。它不是灵丹妙药。它所做的就是转义危险字符,以便它们可以安全地在单个查询字符串中使用。但是,如果您不事先清理您的输入,那么您将很容易受到某些攻击媒介的攻击。

想象一下以下 SQL:

$result = "SELECT fields FROM table WHERE id = ".mysql_real_escape_string($_POST['id']);

您应该能够看到这很容易被利用。
想象一下id参数包含常见的攻击向量:

1 OR 1=1

它们的编码中没有危险的字符,因此它将直接通过转义过滤器。离开我们:

SELECT fields FROM table WHERE id = 1 OR 1=1

这是一个可爱的 SQL 注入向量。

虽然这些功能很有用,但必须小心使用。您需要确保所有网络输入都在某种程度上得到验证。在这种情况下,我们发现我们可以被利用,因为我们没有检查我们用作数字的变量实际上是数字。在 PHP 中,您应该广泛使用一组函数来检查输入是否为整数、浮点数、字母数字等。但是当涉及 SQL 时,请最注意准备好的语句的值。如果上面的代码是一个准备好的语句,那么它就是安全的,因为数据库函数会知道1 OR 1=1不是有效的文字。

至于htmlspecialchars()。这本身就是一个雷区。

PHP 中存在一个真正的问题,因为它有一系列不同的 html 相关转义函数,并且没有明确说明哪些函数具体做什么。

首先,如果您位于 HTML 标记内,那么您就有麻烦了。看着

echo '<img src= "' . htmlspecialchars($_GET['imagesrc']) . '" />';

我们已经在 HTML 标签内,所以我们不需要 来做任何危险的事情。我们的攻击向量可能是javascript:alert(document.cookie)

现在生成的 HTML 看起来像

<img src= "javascript:alert(document.cookie)" />

攻击直接通过。

情况变得更糟。为什么?因为 htmlspecialchars 只编码双引号而不是单引号。所以如果我们有

echo "<img src= '" . htmlspecialchars($_GET['imagesrc']) . ". />";

我们邪恶的攻击者现在可以注入全新的参数

pic.png' onclick='location.href=xxx' onmouseover='...

gives us

<img src='pic.png' onclick='location.href=xxx' onmouseover='...' />

在这些情况下,没有什么灵丹妙药,您只需自己清理输入即可。如果你尝试过滤掉坏字符,你肯定会失败。采用白名单方法,只允许好的字符通过。看着那(这XSS 备忘单 http://ha.ckers.org/xss.html有关向量如何多样化的示例

即使您在 HTML 标记之外使用 htmlspecialchars($string),您仍然容易受到多字节字符集攻击向量的攻击。

最有效的方法是使用 mb_convert_encoding 和 htmlentities 的组合,如下所示。

$str = mb_convert_encoding($str, ‘UTF-8′, ‘UTF-8′);
$str = htmlentities($str, ENT_QUOTES, ‘UTF-8′);

即使这样,IE6 仍然容易受到攻击,因为它处理 UTF 的方式。但是,您可以回退到更有限的编码,例如 ISO-8859-1,直到 IE6 使用率下降。

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

在 Web 开发过程中,我将花费多少时间用于用户输入验证? 的相关文章

  • Cloud Firestore 安全规则使用的语言名称是什么?

    我想知道用于 Cloud Firestore 安全规则的语法名称 如下所述https firebase google com docs firestore security get started authuser 0 https fire
  • 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

    在python 2 7 8到2 7 9升级中 ssl模块从使用更改为 DEFAULT CIPHERS DEFAULT aNULL eNULL LOW EXPORT SSLv2 to DEFAULT CIPHERS ECDH AESGCM D
  • 各个平台对 SHA-2 的支持情况如何?

    我读到 SHA 1 即将从 FIPS 180 2 标准中退役 http gcn com articles 2010 03 03 rsa sha competition aspxhttp gcn com articles 2010 03 03
  • Symfony 5.4 Security Bundle,注册后无法登录

    我在 5 4 版本上构建空的新项目 我使用这些命令来构建项目 composer create project symfony skeleton 5 4 testapp54 cd testapp54 composer require weba
  • 如何对 Firebase 中托管的静态网站进行 IP 白名单? / 是否有用于 Firebase 托管的 WAF?

    我有一个在 Firebase 中托管的静态网站 我可以很好地附加一个自定义域 我想将对我的网站的访问限制在特定范围的 IP 范围内 我知道在 GCP 中 Google Cloud Armor 可以做到这一点 但 Cloud Armor 仅适
  • AES 在汇编中的实现 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 大家好 我正在尝试构建一个代码来演示
  • 如何在 Web 应用程序中使用 Javascript 安全地访问 Windows Azure 移动服务?

    我需要一本 web javascript 安全入门书 根据如何使用 Windows Azure 移动服务的 HTML JavaScript 客户端 http www windowsazure com en us develop mobile
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • 在数据库中存储密码的最佳方法[关闭]

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

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 如何检查 NTAccount 对象代表组还是用户?

    使用返回的访问规则时 GetAccessRules True True GetType System Security Principal NTAccount 如何判断每个规则中引用的 NTAccount 对象是用户帐户还是组 Update
  • 日志锻造强化修复

    我正在使用 Fortify SCA 来查找我的应用程序中的安全问题 作为大学作业 我遇到了一些无法解决的 日志锻造 问题 基本上 我记录一些来自 Web 界面的用户输入的值 logger warn current id not valid
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • Couchdb - 为读者用户提供的蒲团

    我想知道如何阻止读者访问 couchdb 中的 futon utils 只允许管理员访问 我需要这样做 为什么如果读者用户访问蒲团 他可以看到我所有数据库的名称以及有多少文档 我的应用程序应该让读者只有在知道文档 ID 时才能访问文档 引用
  • SSLHandshakeException:证书中的主机名不匹配

    我正在编写一个系统 必须向具有自签名证书的服务器 一个名为 ARX 的第三方程序 当前在开发过程中在本地主机上运行 进行多部分发布 我试图找到它的证书 但只能找到三个不同的jks文件 服务器 jks 服务器信任 jks and 服务器ca
  • PHP Web 应用程序 (Magento) 遭到黑客攻击;这段黑客代码有什么作用?

    我刚刚安装的 Magento 1 3 2 4 被黑了 你能告诉我这段代码的目的是什么吗 另外 如何阻止这种情况以及如何发现漏洞 谢谢 function net match network ip ip arr explode network
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他

随机推荐