加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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注入.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读