HTML数据经过十六进制消毒后超出字段长度

问题描述 投票:1回答:4

问题是您不能告诉用户字段中允许多少个字符,因为转义的值比未转义的字符多。

我看到一些解决方案,但看起来都不是很好:

  • 每个字段一个白名单((工作量太大,不能完全解决问题)
  • 每个字段一个黑名单(与上面相同)
  • 使用即使所有字符都被转义也可以保存数据的字段长度(错误)
  • 解开数据库字段的大小(更糟)
  • 保存十六进制转义的数据,并将职责完全传递给输出过滤(不太好)
  • 让用户猜测最大大小(最差)

还有其他选择吗?这种情况下是否有“最佳实践”?

示例代码:

$string = 'javascript:alert("hello!");';
echo strlen($string);
// outputs 27
$escaped_string = filter_var('javascript:alert("hello!");', FILTER_SANITIZE_ENCODED);
echo strlen($escaped_string);
// outputs 41

如果数据库字段的长度为40,则转义的数据将不适合。

php html validation
4个回答
8
投票

不要围绕数据库构建应用程序-为应用程序构建数据库!


2
投票

对这里的上下文做出一些疯狂的假设:


0
投票

这是一个有趣的问题。


0
投票
  • 为什么允许用户输入转义字符?
© www.soinside.com 2019 - 2024. All rights reserved.