apachespark:在sparksql中,sql易受sql注入攻击吗

dfuffjeb  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(425)

这个问题在这里已经有了答案

spark sql安全注意事项(1个答案)
三年前关门了。
脚本:
假设配置单元中有一个表,并使用apachespark中的sparksql查询它,其中表名作为参数传递并连接到查询。
在非分布式系统的情况下,我对sql注入漏洞有基本的了解,在jdbc的上下文中,我了解createstatement/preparedstatement在这类场景中的用法。
但是在sparksql的情况下,这个场景会怎么样呢?这个代码易受攻击吗?有什么见解吗?

def main(args: Array[String]) {

    val sconf = new SparkConf().setAppName("TestApp")
    val sparkContext = new SparkContext(sconf)
    val hiveSqlContext = new org.apache.spark.sql.hive.HiveContext(sparkContext)

    val tableName = args(0)    // passed as an argument

    val tableData  =  hiveSqlContext.sql("select IdNUm, Name from hiveSchemaName." + tableName + " where IdNum <> '' ")
                                        .map( x => (x.getString(0), x.getString(1)) ).collectAsMap()

    ................
    ...............

}
bttbmeg0

bttbmeg01#

您可以在spark 2.0中尝试以下操作:

def main(args: Array[String]) {
val conf = new SparkConf()

val sparkSession = SparkSession
  .builder()
  .appName("TestApp")
  .config(conf)
  .enableHiveSupport()
  .getOrCreate()

val tableName = args(0)    // passed as an argument

val tableData  =  sparkSession
.table(tableName)
.select($"IdNum", $"Name")
.filter($"IdNum" =!= "")
.map( x => (x.getString(0), x.getString(1)) ).collectAsMap()

................
...............

}`

7fhtutme

7fhtutme2#

在java中,处理sql注入威胁最常用的方法是使用准备好的语句。
您可以使用scala中的java库或google准备的语句来查找scala库。由于scala也用于web应用程序,我确信这样的库是存在的。。

相关问题