P S*_*ved 10 mysql sql linux shell sql-injection
我使用shell脚本与MySQL数据库进行通信.MySQL支持将查询指定为shell参数,如下所示:
mysql my_db -B -N -e "select id from Table"
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个参数,我想在查询中使用,我如何获得针对注入攻击的保护?
一种天真的方法是将变量值粘贴到请求中,但它不是很安全:
mysql my_db -B -N -e "select id from Table where name='$PARAM'"
Run Code Online (Sandbox Code Playgroud)
是否有任何技巧或记录的接口可以从命令行进行注入安全查询?
您可以对该值进行base64编码,然后在MySQL中对其进行base64解码.MySQL中有UDF用于将Base64数据转换为通用数据.此外,大多数系统都具有uuencode或base64编码数据的"base64"命令.
每当您通过连接参数构造 SQL 时(如您的示例中所示),您的应用程序都容易受到 SQL 注入攻击。维基百科上有一篇关于此问题的文章,链接为: http: //en.wikipedia.org/wiki/SQL_injection
我怀疑您会想要编写一个 unix 过滤器来使用mysql_real_escape_string
本文中提到的函数构建 SQL 查询。
考虑将 SQL 作为第一个参数传递,将变量作为后续参数传递,然后让它返回构造的 SQL。如果您将过滤器命名为“blobbo”,则示例中的命令可能如下所示:
blobbo“从名称=%s 的表中选择 id”$PARAM