0

So I have this code which basicaly retrieves data from a mysql database:

$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']; 

And well after that I echo all of the variables... I was wondering, might there be any problem regarding security with a code like this? Is there any risk of it being hacked? Thanks!

4

3 回答 3

3

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

是的,它确实!不仅mysql_函数被弃用并且不再被维护,部分原因是它们使用 SQLInjection 带来的安全风险,它们还缺乏面向对象的功能。

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

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

于 2013-07-13T10:42:54.223 回答
1

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

于 2013-07-13T10:36:43.457 回答
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_reporting您应该使用和处理错误display_errors

于 2013-07-13T10:44:02.820 回答