【问题标题】:How do I fix this, trying to call database entry with $GET data?我该如何解决这个问题,尝试使用 $GET 数据调用数据库条目?
【发布时间】:2014-05-17 21:12:08
【问题描述】:

我正在尝试通过链接发送数据,例如使用链接中的 ...?id=3。比我在 php 中使用 GET 来检索它。但是当我尝试将其放入查询中时它不起作用

$select= mysql_query("SELECT * FROM products WHERE id= $_GET['id'] ");

【问题讨论】:

  • 使用 mysqli 或 PDO 代替。那你就安全多了。
  • 我假设与数据库的连接正常,一切正常。什么不完全有效?你遇到了什么错误?如果您使用常规变量,它可以正常工作吗?
  • @WizKid 感谢您的建议,但我有一些时间限制,我没有时间去接它。你知道我在 mysql 中可能做错了什么或正确的方法吗?
  • @Patrick 是的,如果我输入一个数字,它可以正常工作
  • 将 "... {$_GET['id']} ..." 用引号括起来 - 请记住这会增加 SQL 注入漏洞。

标签: php mysql get


【解决方案1】:

你必须确保变量是一个整数,否则你很容易受到 SQL 注入攻击。

$id = (int) $_GET['id'];
$select= mysql_query("SELECT * FROM products WHERE id= $id");

PHP 确实允许在带引号的字符串中进行简单的变量引用,但不允许像您正在做的数组引用。您可以通过将表达式括在大括号中来进行复杂的变量插值,例如 @user3624411 建议...但是请不要。这仍然容易受到 SQL 注入的影响,你不能这样做。如果你是一名电工,你会因为安装不安全的接线而导致火灾。

理想情况下,您会切换到 PDO 并使用查询参数,我鼓励您在第一时间了解这一点。但我知道您受到时间限制,重写所有数据库代码是不切实际的。

【讨论】:

  • 感谢您的帮助,我正在使用链接访问窗帘产品,它用于电子商务网站。这只是为了让我可以在 php 页面上打开选定的产品。确实认为您的方法足够安全。
  • 是的,它强制$id 为整数,这样可以防止任何恶意内容潜入您的 SQL。您确实需要了解 SQL 注入的工作原理以及如何保护自己。我推荐SQL Injection Myths and Fallacies(我的演示文稿)。
【解决方案2】:

试试这个:

$id = $_GET['id'];
$select= mysql_query("SELECT * FROM products WHERE id= '$id' ");

或者你可以使用$select= mysql_query("SELECT * FROM products WHERE id= " .$_GET['id'] . ")";

但我建议你不要使用 GET 方法和 MYSQL:使用 POST 和 MYSQLI 或 PDO。

【讨论】:

  • 无论是 GET 还是 POST,这仍然容易受到 SQL 注入的攻击。
  • 是的,只是因为变量不是来自 URL 的 $_GET,用户仍然可以将数据插入到 $_POST 变量中。 MySQLi 和 PDO 准备好的语句将在大多数情况下保护您免受 SQL 注入,而 POST 不会。
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 2021-03-19
  • 2019-09-16
  • 1970-01-01
  • 2022-10-18
  • 2019-07-03
  • 2020-11-27
相关资源
最近更新 更多