我是否需要在ajax请求和接收该请求的php之间编码/解码查询参数?

Rad*_*dek 4 php sql ajax jquery

我想通过ajax调用作为参数发送整个sql命令.我是否必须逃避它或做一些特别的事情?

就像是 tools.php?database=db2&sql=select * from table

如果需要逃脱

  • 我怎么在javascript/jquery中做到这一点
  • 我怎么办,然后在PHP中阅读它

注 - 非常具体的用例和系统设置

Web服务器只能从我们的内部网络内部访问.如果有人闯入,他们可以获得所有的数据库,所以我通过这个问题改进的"小应用程序"并不重要.我已经实现了整个数据库的DROPping,更新了整个列,通过我的Web应用程序更新了db的设置等.我只是想添加这个新功能.我甚至可能会发现我将成为这个Web应用程序的唯一用途.

Ste*_*hen 12

您没有理由在客户端构建SQL查询.如果您构建的系统可能是此规则的例外,那么您不会在此处提出此问题.

在AJAX请求中发送基本信息,并使用该信息构建查询.

使用PDO和参数化查询来保护自己免受SQL注入攻击.


J0H*_*0HN 11

人们,如果你不是绝对确定你在做什么,请不要使用这个代码

此代码受到灾难性安全漏洞的影响,因此除非您绝对确定没有邪恶的人会访问它,否则请不要使用它.

发送:

jQuery.ajax({
    type: 'post',
    dataType: 'json',
    url: *your backend url here*,
    data: {database: 'db', sql: "select * from table"},
    success: function(data, textStatus){
        //perform any processing with data returned from backend here
    }
});
Run Code Online (Sandbox Code Playgroud)

接收:

<?php
    $sql = $_POST['sql'];
    $db = $_POST['db'];
    //db connection
    $result = mysql_query($sql);
    //processing query result, $rslt is processing result
    echo json_encode($rslt);
?>
Run Code Online (Sandbox Code Playgroud)

Hovewer,从客户端发送SQL不是一个好主意,这种方法极易受到SQL注入的攻击.但是,如果你确定要拍自己的腿......

  • @Stephen,由他来决定.我已经警告过他,甚至比你更多.所以,不要扮演"哥哥",让拉德克对他正在做的事情负责. (19认同)
  • @Stephen,这次讨论的目的是什么?仅供参考,我已经提出了你的答案并首先对这个问题表示赞赏,所以我赞同你的观点.你想要我做什么?我对这个问题的看法是,人们,尤其是程序员必须对自己的行为负责.所以,如果OP要求的话 - 我回答.如果它是危险的 - 我警告并劝阻他很多,但无论是否使用这种方法,这都是他的责任.因此,除非你要改变我的想法,否则这个讨论毫无用处. (8认同)
  • 也许是因为他想帮忙? (4认同)
  • 这是一个问答网站.有一个Q,这是A.为了完成"有用"方面,这个场景的问题非常清楚.来自我的+1,这里没有问题.// Naysayers:如果它对您有所帮助,请将其视为远程命令行数据库管理工具.像SQLYog或PhpMyAdmin这样的客户端会阻止您编写任意查询吗?_不,它没有._嘘,继续前进! (4认同)
  • @JOHN你为什么要张贴这个?OP*明确*不理解这个的安全含义. (3认同)
  • 这不是关于"扮演哥哥".OP征求意见.问题的复杂程度表明OP没有过多的经验,因此并没有真正理解这种方法的相关危险.说"嘿,顺便说一下,这是一个非常危险的想法,但嘿,这里是代码,无论如何",这是不负责任的,IMO.任何真正理解做这样事情的人都不会问这样一个基本问题. (2认同)
  • "一位驾驶教练没有对学生说"好了,现在你可以驾驶法律限制的两倍,但这真的很危险,所以你不应该这样做!".---不,他教你如何使用油门踏板,教你如何做不安全的事情,并相信你不滥用电源. (2认同)