避免Spark-SQL中的SQL注入的首选方法是什么(在Hive上)



>假设一个 SchemaRDD rdd,并customer注册表。您希望根据用户输入筛选出记录。您可能知道如何执行此操作的一个想法如下:

rdd.sqlContext.sql(s"SELECT * FROM customer WHERE name='$userInput'")

但是,从PHP的旧时代开始,我们就知道这可能会导致令人讨厌的事情。是否有等效的准备声明?我唯一能找到的看起来远程相关的是org.apache.commons.lang.StringEscapeUtils.escapeSql .

一种选择是使用节俭服务器来公开jdbc,然后可以使用常用的技术(PreparedStatement等)来防止SQL注入。

def safeSql(query,**args):
    spark.udf.register("arg", lambda x: args[x])
    return(spark.sql(query))
     
safeSql("select arg('a'),arg('b')",a=4,b="O'Malley").show()

以上是在pyspark中,但可以用Scala或其他语言完成。诀窍是注册一个 udf。

有关如何在pyspark 3.3.0+中使用内置功能执行此操作,请参阅此处的答案。

相关内容

  • 没有找到相关文章

最新更新