我正在制作学校Web应用程序,用于测试用户的SQL知识,他们必须以textarea格式输入SQL查询并在服务器mySQL上执行。我遇到的问题是我无法对未知的动态查询(由用户输入)执行预准备语句或绑定或白名单,这会使应用程序SQL注入容易受到攻击。
如何在不影响最终比较结果的情况下阻止对此类查询进行SQL注入(允许SELECT,DELETE,INSERT,UPDATE)?
也许我错过了一些可以做到这一点的PHP函数?或者我必须创建一个SQL解析器,它将检查用户查询可能的SQL注入?我不是想做任何花哨的事情,我只需要为我的应用程序提供基本的保护。
我使用CodeIgniter作为框架,但我认为这不会改变任何东西。
当用户可以输入
等查询时,如何使用PDO,语句,白名单和其他技术 select * from user where some_column = some_value (this is just example)
或查询
select * from user LEFT JOIN ..... having something > 5 ORDER by some_column
我无法预测他们的输入,所有可能的组合都可能包含注射漏洞。
我收到的是$_POST['SQL_user_query']
,其中包含SQL查询字符串,我无法使用它准备好的语句。