postgresql – Postgres函数与准备好的查询中的SQL注入
在Postgres中,准备好的查询和用户定义的函数是否等同于防止SQL注入的机制?
一种方法比另一种方法有特别的优势吗?
这取决于.
SQL函数 使用 传递的参数被视为值,并且不能进行SQL注入 – 只要您不从主体调用不安全的函数并传递参数. PL / pgSQL函数 对于 但是,PL / pgSQL允许动态SQL,其中传递的参数(或部分)连接到查询字符串并使用EXECUTE执行.这可以将用户输入转换为SQL代码并使SQL注入成为可能.你不能从外面告诉函数体是否正确处理它.提供工具. 仅在您需要的地方使用动态SQL.使用参数作为值的纯SQL语句可以安全地防止SQL注入,如SQL函数. 对于动态SQL,最好将值作为值传递: > USING条款. Example. 在主体上无法进行SQL注入. 如果在SQL字符串中连接值,请使用: > 安全地包装单引号中的字符串,从而避免语法错误和SQL注入. 应在SQL字符串中作为标识符处理的进程参数: > 在需要时安全地用双引号括起字符串,从而避免语法错误和SQL注入. 有关: > Refactor a PL/pgSQL function to return the output of various SELECT queries 永远不要只是从用户输入和执行构建一个字符串.这包括由用户直接传递或从系统目录中提取的标识符.在构建动态SQL时,所有必须像用户输入一样对待并安全引用! 更多关于此相关答案中的性能影响: > Function Performance SQL注入的基础知识: > http://bobby-tables.com/ 类似的注意事项适用于允许动态SQL的其他服务器端语言. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |