当前位置:  开发笔记 > 编程语言 > 正文

这个MySQL查询如何容易受到SQL注入攻击?

如何解决《这个MySQL查询如何容易受到SQL注入攻击?》经验,为你挑选了2个好方法。

在对前一个问题的评论中,有人说下面的sql语句打开了我的sql注入:

select
    ss.*,
    se.name as engine,
    ss.last_run_at + interval ss.refresh_frequency day as next_run_at,
    se.logo_name    
from 
    searches ss join search_engines se on ss.engine_id = se.id
where
    ss.user_id='.$user_id.'
group by ss.id
order by ss.project_id, ss.domain, ss.keywords

假设$userid变量被正确转义,这是如何使我容易受到攻击的,我该怎么做才能解决它?



1> Dustin..:

值得使用的每个SQL接口库都对绑定参数提供某种支持.不要试图聪明,只要使用它.

你可能真的,真的认为/希望你已经正确地逃脱了,但是你不值得花时间.

此外,一些数据库支持预处理语句缓存,因此正确执行也可以提高效率.

更简单,更安全,更快捷.



2> Vinko Vrsalo..:

假设它被正确转义,它不会让你容易受到攻击.事情是,正确逃避比第一眼看上去更难,并且每次进行这样的查询时,你都会谴责自己逃脱.如果可能,避免所有麻烦并使用预准备语句(或绑定参数或参数化查询).这个想法是允许数据访问库正确地转义值.

例如,在PHP中,使用mysqli:

$db_connection = new mysqli("localhost", "user", "pass", "db");
$statement = $db_connection->prepare("SELECT thing FROM stuff WHERE id = ?");
$statement->bind_param("i", $user_id); //$user_id is an integer which goes 
                                       //in place of ?
$statement->execute();

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有