postgresql – 存储过程是否阻止SQL注入?

前端之家收集整理的这篇文章主要介绍了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注入.

猜你在找的Postgre SQL相关文章