所以我有这个代码,它基本上从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'];
在那之后,我回应所有变量......我想知道,对于像这样的代码的安全性可能有任何问题吗?是否存在被黑客入侵的风险? 谢谢!
答案 0 :(得分:3)
我想知道,这样的代码可能存在安全方面的问题吗?是否存在被黑客入侵的风险?
是的,确实如此! mysql_
函数不仅被弃用而且不再被维护,部分原因是它们使用SQLInjection所带来的安全风险,它们也缺少对象导向能力。
现在连接和处理数据库查询的最佳安全方法是通过mysqli
或PDO
接口。你应该学习任何适合的。
最后但并非最不重要的是,使用@
方法来抑制错误,几乎可以告诉您的脚本,而不是在出现错误时向您显示错误。请记住,错误应该被处理而不被忽视
答案 1 :(得分:1)
此代码肯定存在严重的安全漏洞。您应该使用Prepared语句。可以修改GET参数。您的代码容易受到SQL注入攻击。
答案 2 :(得分:1)
使用现有的mysql
扩展程序设置,最佳方法是至少将字符串传递给mysql_real_escape_string
。如果您可以转移到基于mysqli
或pdo
的设置,那将是理想的选择。
$consulta = @mysql_query("SELECT * FROM productos where categoria='" . mysql_real_escape_string($categoria) . "' ORDER BY nombre ASC");
同样来自Simon的旁注最好不要在@
语句前添加前缀。这给执行增加了一些开销。您应该使用error_reporting
和display_errors
处理错误。