[英]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.