【发布时间】:2015-04-14 19:09:18
【问题描述】:
我对 PHP 还是很陌生,我正在尝试在使我的表单安全方面了解更多信息,以便我的数据库更难通过 SQL 注入等搞砸。我们公司现在的 web 程序员/php 人在短时间内辞职了,所以我的老板暂时把我安置在 php 程序员的位置上,只在前一个程序员的指导下接受了一周的培训(我做了很多 html 和 css 工作,但没有 php之前),直到他们找到真正的替代品。
无论如何,我读到使用mysql_query() 是一个贬值的函数,应该避免使用它,因为该方法很容易受到攻击。我看到我的两个选择是现在使用 PDO 或 MySQLi。作为 PHP 的新手,我无法弄清楚我需要做什么来转换我当前使用的代码(它从请求中发送信息到网站上的报价单并将其存储在数据库中,以防电子邮件出现问题)通过 PDO 或 MySQLi 将数据发送到数据库的更安全的方法。
我正在使用的当前代码行是:
$query = mysql_query("insert into request_for_quote(rfq_company_name, rfq_name, rfq_email, rfq_phone, rfq_end_user) values ('$rfqCompanyName', '$rfqName', '$rfqEmail', '$rfqPhone', '$rfqEndUser')");
这主要由 $_POST 变量提供支持。
$rfqName = mysql_real_escape_string($_POST['rfq_name']);
$rfqEmail = filter_var($_POST['rfq_email'], FILTER_VALIDATE_EMAIL);
$rfqPhone = mysql_real_escape_string($_POST['rfq_phone']);
$rfqCompanyName = mysql_real_escape_string($_POST['rfq_company_name']);
$rfqEndUser = mysql_real_escape_string($_POST['rfq_end_user']);
现在,我的代码可以满足我的需要,它似乎极易受到数据库攻击,我想学习如何解决这个问题,但似乎我在网上找到的所有示例都没有使用设置“将X、Y和Z变量作为值A、B、C插入表列。
是否有任何简单的更改可以使我的数据库提交查询更安全?
【问题讨论】:
-
+ 感谢您的努力,但这里有很多子问题,最终相当广泛。因此,这个问题很可能会被关闭。
-
你现在做的事情在短期内是ok的。除非您简单地设置它,否则迁移到 MySQLi 或 PDO 可能有点麻烦。 This article 将帮助您确定最适合您的 API。
-
mysql_query不是问题,完全正确。问题在于使用不受信任的变量构建 SQL 语句。这个问题应该让你开始:stackoverflow.com/questions/60174/…
标签: php mysql pdo mysqli sql-injection