可能的安全漏洞php和SQL

时间:2013-07-13 10:35:02

标签: 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)){
$nombre = $seleccion['nombre'];
$referencia = $seleccion['referencia'];
$descripcion = $seleccion['descripcion']; 
$imagen = $seleccion['imagen']; 

在那之后,我回应所有变量......我想知道,对于像这样的代码的安全性可能有任何问题吗?是否存在被黑客入侵的风险? 谢谢!

3 个答案:

答案 0 :(得分:3)

  

我想知道,这样的代码可能存在安全方面的问题吗?是否存在被黑客入侵的风险?

是的,确实如此! mysql_函数不仅被弃用而且不再被维护,部分原因是它们使用SQLInjection所带来的安全风险,它们也缺少对象导向能力。

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

最后但并非最不重要的是,使用@方法来抑制错误,几乎可以告诉您的脚本,而不是在出现错误时向您显示错误。请记住,错误应该被处理而不被忽视

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用现有的mysql扩展程序设置,最佳方法是至少将字符串传递给mysql_real_escape_string。如果您可以转移到基于mysqlipdo的设置,那将是理想的选择。

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

同样来自Simon的旁注最好不要在@语句前添加前缀。这给执行增加了一些开销。您应该使用error_reportingdisplay_errors处理错误。

相关问题