我有一个小型Python项目网站,访问者可以在这里练习编写SQL代码。 这段代码实际上会运行并返回值。 我知道我需要防止SQL注入,但我不确定最好的方法,因为网站的目的是用户应该能够针对一个真实的数据库编写和执行任意SQL代码。
我应该注意如何防止恶意行为? 我想防止诸如DROP xyz;这样的语句,但用户仍然应该能够执行代码。 我想也许理想的解决方案是,用户只能从数据库中 "读取",即他们只能运行SELECT语句(或变体)。 但我不确定 "只读 "是否能抓住所有恶意行为的边缘情况。
任何想法或建议都将是有益的
对于一个将SQL语句作为用户输入并逐字运行的网站,没有办法防止SQL注入。该 目的 的网站是SQL注入。防止SQL注入的唯一方法就是不开发这个网站。
如果你真的开发了这个网站,如何防止恶意SQL?答案:不要让恶意用户访问这个网站。只允许受信任的用户使用它。
好吧,我假设你确实要开发这个网站,你也确实要允许所有用户使用,而不需要做大量的工作来筛选他们。
那么就变成了限制他们可能造成的损害的任务。仔细限制他们的权限,让他们只能在特定的模式中创建对象和运行查询的权限。
或者更好的是,为每个人启动一个Docker容器,让他们拥有自己的私有数据库实例,并限制容器可以使用的CPU和内存。