php - 清理/转义用户输入和输出

标签 php mysql input output

我知道我已经asked一个关于 sanitizer 和转义的问题,但我有一个问题没有得到回答。

好了,到此为止。如果我有一个 PHP 脚本并且我 GET用户输入和SELECT它来自 mySQL 数据库,如果我没有逃脱 < 是否重要/是否存在任何安全风险和 >通过使用 htmlspecialchars , htmlentitiesstrip_tags因此允许从数据库中选择/搜索 HTML 标签?因为已经通过使用 trim() 对输入进行了清理, mysql_real_escape_stringaddcslashes (\%_)。

使用htmlspecialchars的问题是它转义了用户输入应该允许的符号 (&)(我想 htmlentities 也是如此?)。配合使用strip_tags ,诸如“John”之类的内容会导致 PHP 脚本选择并显示 John 的结果,这是它不应该做的。

这是我在从数据库中选择之前用于清理输入的 PHP 代码:

if(isset($_GET['query'])) {
  if(strlen(trim($_GET['query'])) >= 3) {
      $search = mysql_real_escape_string(addcslashes(trim($_GET['search']), '\%_'));
      $sql = "SELECT name, age, address WHERE name LIKE '%".$search."%'";
      [...]
  }
}

这是我显示“x 匹配 y 结果”的输出。

echo htmlspecialchars(strip_tags($_GET['search']), ENT_QUOTES, 'UTF-8')." matched y results.";

最佳答案

解决此问题的一个好方法是使用 MySQLi,它使用准备好的语句,基本上可以在后端为您转义所有内容,并提供针对 SQL 注入(inject)的强大保护。不转义 GET 数据与不转义任何其他输入一样危险。

关于php - 清理/转义用户输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173724/

相关文章:

HTML/CSS 两个自动宽度列

php - Ratchet 框架 : needing to click logout link twice

php - 从单个数据库中搜索多个文本框

PHP 从数组索引中获取值

php - 使用 php 和 sql 将 dd/mm/yyyy 转换为 yyyy/mm/dd

php - 从 HTML 读取 Base64 图像到 android picasso 适配器

javascript - 将选择转换为输入而不是跨浏览器

php - PHP : Do I need to explicitly tell it that it's a 301? 中的 301 重定向

mysql - Master-Master 复制 auto_increment_offset

javascript - 如何使用 Javascript 从输入区域获取用户输入并将其分配给变量?