Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL安全检查_Mysql_Security - Fatal编程技术网

MySQL安全检查

MySQL安全检查,mysql,security,Mysql,Security,晚上好 在我让我的网站上线之前,我显然想确保它的安全(或尽可能的安全) 我有一个搜索表单,一个用户上传条目到数据库的机会,我想就是这样 所以我只想看看我应该做些什么来保护这些东西。首先,我的数据库是由一个专用的用户帐户(不是admin或root)访问的,所以我想我已经锁定了那个部分 其次,在我所有的搜索查询中,我都采用这种格式: $result = mysql_query( "SELECT * FROM table WHERE fieldname = '" . mysql_real_escap

晚上好

在我让我的网站上线之前,我显然想确保它的安全(或尽可能的安全)

我有一个搜索表单,一个用户上传条目到数据库的机会,我想就是这样

所以我只想看看我应该做些什么来保护这些东西。首先,我的数据库是由一个专用的用户帐户(不是admin或root)访问的,所以我想我已经锁定了那个部分

其次,在我所有的搜索查询中,我都采用这种格式:

$result = mysql_query(
"SELECT *
FROM table 
WHERE fieldname = '" . mysql_real_escape_string($country) . "' 
AND county = '" . mysql_real_escape_string($county) . "'
ORDER BY unique_id DESC");
最后,在提交表单中的$_POST字段中,在将变量插入数据库之前,我使用以下方法处理变量:

$variable = mysql_real_escape_string($variable);
$result = mysql_query(
"INSERT INTO table (columnone)
VALUES ($variable)";
有人能告诉我我还应该考虑什么,或者这是否足够可以接受吗

像往常一样,提前谢谢你,
Dan

从防止SQL注入的角度来看,您显示的所有内容都很好,除了

$variable = mysql_real_escape_string($variable);
$result = mysql_query(
"INSERT INTO table (columnone)
VALUES ($variable)";

这非常需要在
$variable
周围加引号,或者像@Dan指出的那样,检查它是否是一个数字,以确保安全
mysql\u real\u escape\u string
仅对字符串数据进行清理-这意味着,任何试图打破由单引号或双引号分隔的字符串的行为。如果插入的值没有被引号括起来,它就不会提供任何保护。

您显示的所有内容都可以防止SQL注入,除了

$variable = mysql_real_escape_string($variable);
$result = mysql_query(
"INSERT INTO table (columnone)
VALUES ($variable)";

这非常需要在
$variable
周围加引号,或者像@Dan指出的那样,检查它是否是一个数字,以确保安全
mysql\u real\u escape\u string
仅对字符串数据进行清理-这意味着,任何试图打破由单引号或双引号分隔的字符串的行为。如果插入的值没有被引号括起来,它就不会提供任何保护。

代码看起来不错,不过如果可能的话,您应该考虑使用PDO准备的语句


除此之外,确保PHP代码用于连接MySQL的任何帐户都具有绝对最小的权限。大多数面向web的脚本不需要alter/drop/create类型权限。大多数人只需要更新/插入/选择/删除,甚至更少。这样,即使您的代码级安全性出现严重问题,恶意用户也无法向您发送
”;drop table students--
类型查询(re:)

代码看起来不错,不过如果可能的话,您应该考虑使用PDO准备的语句


除此之外,确保PHP代码用于连接MySQL的任何帐户都具有绝对最小的权限。大多数面向web的脚本不需要alter/drop/create类型权限。大多数人只需要更新/插入/选择/删除,甚至更少。这样,即使您的代码级安全性出现严重问题,恶意用户也无法向您发送
”;drop table students--
类型查询(re:)

您是否考虑过在SQL中使用类似MYSQL的PDO和绑定参数


我的理解是,这比使用mysql\u real\u escape\u string要安全得多。

您是否考虑过在SQL中使用类似mysql的PDO和绑定参数


我的理解是,这比使用mysql\u real\u escape\u string要安全得多。

您已经抵御了一类攻击,即通过表单的SQL注入。在这些代码中,您无需做更多的事情,但这很难保证您的应用程序或服务器的安全。Dan,谢谢。那么,您还建议我看什么呢?您已经抵御了一类攻击,即通过表单的SQL注入。在这些代码中,您无需做更多的事情,但这很难保证您的应用程序或服务器的安全。Dan,谢谢。那么你还建议我看什么呢?假设
columnone
是一个字符字段。如果不是,则引号不合适。@Dan没关系,您需要清理变量。我可以在
$variable
中执行任何操作,比如启动子选择或其他操作。如果它不是一个字符字段,您需要确保它是一个
int
(或者使用引号-mySQL允许它们用于任何类型的值)我没有说不需要对变量进行清理,只是您声称需要在查询中引用它不一定合适。如果它应该是一个数字,您应该确保它是一个数字,但在查询中不应该在它周围加引号。@Dan很公平,我会澄清这一点。假设
columnone
是一个字符字段。如果不是,则引号不合适。@Dan没关系,您需要清理变量。我可以在
$variable
中执行任何操作,比如启动子选择或其他操作。如果它不是一个字符字段,您需要确保它是一个
int
(或者使用引号-mySQL允许它们用于任何类型的值)我没有说不需要对变量进行清理,只是您声称需要在查询中引用它不一定合适。如果它应该是一个数字,你应该确保它是一个数字,但你不应该在查询中用引号括起来。@Dan公平地说,我会澄清这一点。这不完全是真的-mysql\u real\u escape\u string可能具有完美的安全性,你只需要知道你在做什么。但是事先准备好的声明会让人更难忽视一些事情,所以使用themHi Matt没有错,这是我的第一个动态网站,所以说实话,我只是在尝试了解基本情况。不过有几个人把我指给PDO。也许下一次:)PDO确实让生活变得更轻松,但有些查询构造无法处理准备好的语句。对于那些需要从头开始构建自己的查询并自行处理转义/清理的查询,这并不完全正确-mysql\u real\u escape\u string有可能实现完美的安全性,您只需要知道自己在做什么。但事先准备好的陈述会让人更难忽视事情,所以