postgresql – 存储过程是否阻止SQL注入?
发布时间:2020-12-13 16:21:11 所属栏目:百科 来源:网络整理
导读:存储过程是否可以防止针对PostgreSQL数据库的SQL注入攻击?我做了一些研究,发现即使我们只使用存储过程,SQL Server,Oracle和 MySQL也不能安全地防止SQL注入.但是,PostgreSQL中不存在此问题. PostgreSQL核心中的存储过程实现是否会阻止SQL注入攻击,还是其他什
存储过程是否可以防止针对PostgreSQL数据库的SQL注入攻击?我做了一些研究,发现即使我们只使用存储过程,SQL Server,Oracle和
MySQL也不能安全地防止SQL注入.但是,PostgreSQL中不存在此问题.
PostgreSQL核心中的存储过程实现是否会阻止SQL注入攻击,还是其他什么?或者即使我们只使用存储过程,PostgreSQL也容易受到SQL注入?如果是这样,请给我一个例子(例如书籍,网站,纸张等).
不,存储过程不会阻止SQL注入.这是一个不幸允许SQL注入的存储过程的实际示例(来自我工作的内部应用程序).
这个sql服务器代码: CREATE PROCEDURE [dbo].[sp_colunmName2] @columnName as nvarchar(30),@type as nvarchar(30),@searchText as nvarchar(30) AS BEGIN DECLARE @SQLStatement NVARCHAR(4000) BEGIN SELECT @SQLStatement = 'select * from Stations where ' + @columnName + ' ' + @type + ' ' + '''' + @searchText + '''' EXEC(@SQLStatement) END END GO 大致相当于postgres: CREATE or replace FUNCTION public.sp_colunmName2 ( columnName varchar(30),type varchar(30),searchText varchar(30) ) RETURNS SETOF stations LANGUAGE plpgsql AS $$ DECLARE SQLStatement VARCHAR(4000); BEGIN SQLStatement = 'select * from Stations where ' || columnName || ' ' || type || ' ' || ''''|| searchText || ''''; RETURN QUERY EXECUTE SQLStatement; END $$; 开发人员的想法是创建一个通用的搜索过程,但结果是WHERE子句可以包含用户想要的任何内容,允许从little Bobby Tables访问. 无论您使用SQL语句还是存储过程都无关紧要.重要的是您的SQL是使用参数还是连接字符串.参数阻止SQL注入;连接字符串允许SQL注入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |