【问题标题】:securing sql queries against malicious intent保护 sql 查询免受恶意攻击
【发布时间】:2013-05-09 05:05:33
【问题描述】:

对于原型设计,我经常使用自建插件,我可以在其中做类似的事情

$.databaseContents({
   url: '/sqliquery.php',
   data : {query : 'SELECT * FROM members WHERE id = 45'}
});

php 脚本将执行查询并返回 JSON 编码的结果。

在 localhost 环境中,我显然不担心保护我的服务器免受恶意攻击。

所以我想知道,如果我真的想在实时网站上部署它,我最好怎么做?我不热衷于做很多不必要的安全工程——我不会每天获得 12,000 次点击。但我想确保我的数据库不会注入讨厌的查询。

经过阅读,我的印象是我可以通过执行mysql_real_escape_string($_POST["query"]); 来简单地保护 php 查询变量,但这似乎并不安全 - 不能有人直接与 php 脚本交互并通过欺骗主机或提交数据某物?我对这些东西不是很熟悉。

我想也许只允许特定的 URL 访问它会很好。还是可以轻松绕过?

感谢您的任何指点。

【问题讨论】:

    标签: mysqli cross-domain security


    【解决方案1】:

    所以我想知道,如果我真的想在实时网站上部署它,我最好怎么做?

    很简单

    放弃这种在客户端创建查询的方法。

    并像每个人那样创建它们——仅在服务器端。使用准备好的语句来表示查询中的任何动态数据。

    所以 - 在服务器端脚本中使用占位符编写您的查询,然后从客户端发送仅数据,然后将此数据绑定到准备好的语句,然后运行您的查询。

    这是唯一的方法。

    【讨论】:

    • 嗯。我想我期待这样的答案,我意识到我需要重新表述这个问题:如果你是恶意黑客并且正在查看一个 2 位网站,那么简单地猜测上面的查询并不难。我是认真的:表被称为members 并且表单数据变量名称与列名称相同的可能性很高。鉴于这种情况,我该如何正确防止注入尝试?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多