【问题标题】:Use javascript and php via ajax to run MySQL queries通过 ajax 使用 javascript 和 php 运行 MySQL 查询
【发布时间】:2010-12-10 19:11:03
【问题描述】:

我正在查看我的一个项目的一些代码,并考虑我使用 ajax 调用的所有 php 页面,这些页面只运行一个简单的更新或插入查询,这让我思考。如果我基本上可以从 javascript 运行插入或更新 sql 查询会怎样。

假设我在服务器端使用 ajax 和 php 的原型 javascript 框架。

这行得通吗?

js:

<script type="text/javascript">
// table is string containing table name
// fields is an array of field names
// values is an array of values
function mysql_insert(table,fields,values) {
    var sql = "INSERT INTO " + table + "(";
    for(i=0; i<fields.length; i++) {
        sql = sql + "`"+fields[i]+"`";
    }
    sql = sql + ") VALUES (";
    // purposefully used fields array in for loop so we get matching number of values
    for(i=0; i < fields.length; i++) {
        sql = sql + "'"+values[i]+"'";
    }
    sql = sql + ");";

    var par = 'query='+sql;
    var ajax = new Ajax.Request('sql.php',{method:'post',parameters:par,onComplete:function(res) { }});
}
</script>

php:

<?php
    include('db.php');  // connect to the mysql server and select database
    mysql_query($_POST['query']);
?>

显然这是一个简单的例子,只是想知道这是否可行,并且我可以替换许多运行单独查询的小型 php 页面?

【问题讨论】:

  • 安全威胁。它会起作用,但是您向公众公开了太多信息。

标签: php javascript mysql ajax


【解决方案1】:

不要那样做!

它将允许任何人对您的数据库做任何他喜欢做的事情!

他将能够向您的数据库发送任何 sql 命令。

【讨论】:

  • 我想知道,如果我们使用登录机制后设置的会话(cookie),还会有问题吗?
  • 完全同意 Ghommey 的观点。 javascript 中的所有内容都是可见且可修改的。
  • @NawaMan... 是的,因为任何能够登录的人仍然可以做任何事情...
  • 谢谢,有道理我一直忘记javascript可见性的东西。我比较熟悉的编译软件只是在业余时间学习网络编程。
  • :-O -- 那么如果cookie(或会话)不起作用?那么普通的 PHP 用户登录呢?是否足够安全?如果是这样,为什么与这个 AJAX 不同。如果没有,我们能做什么?提前致谢。
【解决方案2】:

你为什么不在你的 PHP 中隐藏你的 SQL 语句呢?将您的数据库架构公开是非常危险的。

尝试只传递不带字段名的数据。

【讨论】:

    【解决方案3】:

    Ghommey 完全正确。如果您有能力重新设计您的应用程序架构,那么我建议您阅读Advanced Ajax: Architecture and Best Practices。它讨论了与 ajax 相关的安全问题,以及您应该如何设计您的应用程序以使用 ajax,更有趣的是,服务器端脚本在 PHP 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2017-03-15
      • 2015-09-19
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多