Php 以下MySql存储过程是否可用于sql注入?
阅读了几乎所有关于这个的帖子,但无法判断我的程序是否是可漏洞的?感谢您的帮助 1校准程序如下:Php 以下MySql存储过程是否可用于sql注入?,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,阅读了几乎所有关于这个的帖子,但无法判断我的程序是否是可漏洞的?感谢您的帮助 1校准程序如下: $query = ($is_mine?'call dispatch.dis_get_my_assigned_tasks("'.$username.'");' 程序: CREATE DEFINER=`test`@`localhost` PROCEDURE `dis_get_all_assigned_tasks`() BEGIN select distinct at_id, at_iss
$query = ($is_mine?'call dispatch.dis_get_my_assigned_tasks("'.$username.'");'
程序:
CREATE DEFINER=`test`@`localhost` PROCEDURE `dis_get_all_assigned_tasks`()
BEGIN
select distinct at_id, at_issues, at_location, at_room_number, user_fname,
from dispatch.dis_assigned_tasks
left outer join dispatch.dis_users
on user_id = at_user
order by at_location, at_user_pickup_timestamp desc;
END
CREATE DEFINER=`test`@`localhost` PROCEDURE `dis_get_user_info`(IN username VARCHAR(45))
BEGIN
select * from dispatch.dis_users where user_username = username;
END
2.呼叫程序如下:
$query = "call dispatch.dis_get_user_info('".$username."');";
程序:
CREATE DEFINER=`test`@`localhost` PROCEDURE `dis_get_all_assigned_tasks`()
BEGIN
select distinct at_id, at_issues, at_location, at_room_number, user_fname,
from dispatch.dis_assigned_tasks
left outer join dispatch.dis_users
on user_id = at_user
order by at_location, at_user_pickup_timestamp desc;
END
CREATE DEFINER=`test`@`localhost` PROCEDURE `dis_get_user_info`(IN username VARCHAR(45))
BEGIN
select * from dispatch.dis_users where user_username = username;
END
这些过程不易受到SQL注入的攻击,但您的查询是安全的
要预防和了解SQL注入,请参阅我们的参考问题:
你说你读过的几乎所有关于这个的帖子看起来都没有很好地涵盖这个主题。我建议你选择更好的材料来接受教育
您需要能够阅读用不同语言编写的代码
这不是安全审查服务。如果您担心这些问题中有某一点,请让我们知道您的想法是什么。可能的重复项看起来像是用“测试”来测试的。@hakre:非常感谢您的回复。我只是想确认这样调用过程是否容易受到攻击?@RaymondNijland:谢谢,我们将使用prepare语句来调用过程。希望这能解决我的问题。尽管过程容易受到SQL注入的攻击,但假设您使用过程作为API层,以便客户可以调用该过程。在它自己的过程中应该有un SQL注入检查。@RaymondNijland:该过程的参数是键入的,实际上只有一个参数,第一个过程没有参数,因此没有注入。至少从书本上看,这个过程不会受到SQL注入的攻击。据我所知,这个过程中没有不安全的动态SQL生成代码。不要相信书本,总是自己尝试。有一个id为68903的mysql错误 这将允许SQL注入,该缺陷已被oracle删除。。。在一个过程中,mysql可能仍然容易受到这种攻击。我不知道我需要分析mysql的源代码才能找到答案。过去也有类似的错误。但是,不是对VARCHAR。也许你知道的更多,mysql bug 68903 仍然是隐藏的,因此您可能是对的,这是一个很深的漏洞OWASP在书中不建议您使用存储过程,事实上它是根据标准来选择工具的,例如,在查找标准时,Mysql很可能不是一个很好的存储过程工具,您可能会选择prepared语句,这很可能在PHP端被破坏,在Mysql中也很可能很弱,所以您只需要使用不同的RDBMS。