【问题标题】:Validation of user input or ���������验证用户输入或��������
【发布时间】:2023-03-15 19:47:01
【问题描述】:

我们让用户从单个文本输入中搜索数据库,我在过滤某些用户提供的字符串时遇到了困难。

例如,如果用户提交:

��������� lcd SONY

(注意?)我需要取消搜索。

我将上述字符串的 base64 编码版本包含在内,以便轻松运行:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z"));

我之前忽略了这样的输入,但现在(不知道为什么)刚刚意识到 mysql 数据库查询几乎要永远执行,所以现在这是高优先级。

另一个强调我们正在使用 utf-8 和 mb_detect_encoding 的示例没有多大帮助:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU="));
ΠΛυντηριο ρουχ�%

所以:

  • 如何检测/过滤这些输入?
  • 这个输入是如何生成的?

【问题讨论】:

  • 拒绝这些输入是错误的做法。您首先需要弄清楚为什么它们会对性能产生不利影响。
  • 这是第一道防线。我现在被困住了,所以我现在要调查数据库性能问题,直到我有一个好主意。
  • 您是说用户实际上是在手动输入替换字符吗? fileformat.info/info/unicode/char/FFFD/index.htm
  • 我不知道“替换字符”是什么。这是否出现在我作为示例提供的字符串中?
  • 是的 - 您是否点击了我评论中的链接?该字符通常只能由软件插入,而不是用户自己插入。

标签: php unicode filter validation detect


【解决方案1】:

你不应该得到那个,虽然如果你真的想过滤(我不推荐),请检查字母数字以及“-.;”等。

您可以使用其中一些功能来帮助您进行过滤。

http://www.php.net/manual/en/function.ctype-alnum.php

【讨论】:

  • 它可以处理“παπουτσια”之类的东西吗?没有。
【解决方案2】:

如果您在创建与 mysql 的连接后执行这些查询,它应该可以很好地处理 utf-8 输入和结果,而不会吐出 ?'s。

mysql_query("SET character_set_client=utf8", $mysqlConn);
mysql_query("SET character_set_connection=utf8", $mysqlConn);
mysql_query("SET character_set_results=utf8", $mysqlConn);

(假设数据库设置为 utf-8,如果它们不变成 ?'s,你不介意不过滤它们)

(同样假设你使用的是mysql,其他dbms可能也有类似的功能)

【讨论】:

  • 我们甚至在用户接触数据库之前就从用户那里获得了这个输入。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多