簡體   English   中英

Apache Spark JDBC SQL注入(pyspark)

[英]Apache Spark JDBC SQL Injection (pyspark)

我正在嘗試向jdbc提交sql查詢,同時免受sql注入攻擊。 我有一些代碼,例如

from pyspark import SparkContext
from pyspark.sql import DataFrameReader, SQLContext
from pyspark.sql.functions import col
url = 'jdbc:mysql://.../....'
properties = {'user': '', 'driver': 'com.mysql.jdbc.Driver', 'password': ''}
sc = SparkContext("local[*]", "name")
sqlContext = SQLContext(sc)
from pyspark.sql.functions import desc
pushdown_query = """(
    select * from my_table 
    where timestamp > {}
) AS tmp""".format(my_date)
df = sqlContext.read.jdbc(url=url, properties=properties, table=pushdown_query)

我可以以某種方式使用綁定參數嗎?

任何阻止SQL注入的解決方案都可以使用。

如果有幫助,我也會使用SQLAlchemy。

如果使用SQLAlchemy,則可以嘗試:

from sqlalchemy.dialects import mysql
from sqlalchemy import text

pushdown_query = str(
  text("""(select * from my_table  where timestamp > :my_date ) AS tmp""")
      .bindparams(my_date=my_date)
      .compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True}))

df = sqlContext.read.jdbc(url=url, properties=properties, table=pushdown_query)

但是在這種簡單情況下,不需要子查詢。 您可以:

df = (sqlContext.read
    .jdbc(url=url, properties=properties, table=my_table)
    .where(col("timestamp") > my_date)))

如果您擔心SQL注入,則可能會遇到更大的問題。 如果僅是( 幾乎 )沒有內置的安全機制,並且可能不應該在不受信任的環境中公開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM