php和SQL可能存在的安全漏洞

php和SQL可能存在的安全漏洞,php,sql,Php,Sql,我有一段代码,基本上是从mysql数据库检索数据的: $categoria = $_GET['categoria']; if($categoria ==""){}else{ $consulta = @mysql_query("SELECT * FROM productos where categoria='$categoria' ORDER BY nombre ASC"); while($seleccion = @mysql_fetch_array($consulta)){ $nombr

我有一段代码,基本上是从mysql数据库检索数据的:

$categoria = $_GET['categoria'];
if($categoria ==""){}else{
$consulta = @mysql_query("SELECT * FROM productos where categoria='$categoria' ORDER BY     nombre ASC");
while($seleccion = @mysql_fetch_array($consulta)){
$nombre = $seleccion['nombre'];
$referencia = $seleccion['referencia'];
$descripcion = $seleccion['descripcion']; 
$imagen = $seleccion['imagen']; 
在那之后,我回应了所有的变量。。。我想知道,像这样的代码在安全性方面会有什么问题吗?有被黑客入侵的风险吗?
谢谢

这段代码肯定有严重的安全缺陷。您应该使用Prepared语句。可以修改GET参数。您的代码易受SQL注入攻击。

此代码肯定存在严重的安全漏洞。您应该使用Prepared语句。可以修改GET参数。您的代码易受SQL注入攻击

我想知道,像这样的代码在安全性方面会有什么问题吗?有被黑客入侵的风险吗

是的,是的mysql函数不仅已弃用且不再维护,部分原因是使用SQLInjection会带来安全风险,而且还缺乏面向对象的功能

连接和处理现有数据库查询的最佳安全方式是通过
mysqli
PDO
接口。你应该学习任何一种适合你的方法

最后但并非最不重要的一点是,使用
@
方法抑制错误实际上是在错误发生时告诉脚本,而不是向您显示错误。记住,错误应该被处理而不是忽略

我想知道,像这样的代码在安全性方面会有什么问题吗?有被黑客入侵的风险吗

是的,是的mysql函数不仅已弃用且不再维护,部分原因是使用SQLInjection会带来安全风险,而且还缺乏面向对象的功能

连接和处理现有数据库查询的最佳安全方式是通过
mysqli
PDO
接口。你应该学习任何一种适合你的方法


最后但并非最不重要的一点是,使用
@
方法抑制错误实际上是在错误发生时告诉脚本,而不是向您显示错误。请记住,在现有的
mysql
扩展设置中,错误不应被忽略最好的方法是至少通过
mysql\u real\u escape\u string
传递字符串。如果您可以移动到基于
mysqli
pdo
的设置,这将是理想的选择

$consulta = @mysql_query("SELECT * FROM productos where categoria='" . mysql_real_escape_string($categoria) . "' ORDER BY     nombre ASC");

另外,最好的补充说明是,在语句前面不要加前缀
@
。这会给执行增加一点开销。您应该使用
error\u reporting
display\u errors
处理错误

使用现有的
mysql
扩展设置,最好的方法是至少通过
mysql\u real\u escape\u string
传递字符串。如果您可以移动到基于
mysqli
pdo
的设置,这将是理想的选择

$consulta = @mysql_query("SELECT * FROM productos where categoria='" . mysql_real_escape_string($categoria) . "' ORDER BY     nombre ASC");

另外,最好的补充说明是,在语句前面不要加前缀
@
。这会给执行增加一点开销。您应该使用
error\u reporting
display\u errors
处理错误

顺便说一句,你可以用
if($categoria!=”){
if($categoria){
代替
if($categoria==”){}其他{
。你不能在一个地方问两个问题。当一个问题得到回答时,如果你有另一个问题,你可以问一个新问题。顺便说一句,你可以用
if($categoria!=”){
if($categoria){
而不是
if($categoria==“”){}else{
。你不能在一个地方问两个问题。当一个问题得到回答时,如果你有另一个问题,请问一个新问题。不要忘记删除/提及使用
@
符号抑制错误是个坏主意。如果我移动到mysqli,我是否需要对代码进行任何修改?是的,你需要一些修改。所有
\uquery
函数需要添加连接参数。但是,仅仅是使用mysqli扩展的基本迁移好处(如准备好的语句)就必须彻底检查代码。@DanielnatónGarcíaDon不要忘记删除/提及使用
@
符号抑制错误是个坏主意。如果我移动到mysqli,我会不会o是否对代码进行任何修改?是的,您需要进行一些修改。所有的
\u query
函数都需要添加连接参数。但这只是使用mysqli扩展的基本迁移好处,例如准备好的语句,您将不得不彻底修改代码。@DanielAntónGarcía