2009-10-28 35 views
3

我正在浏览我的一个项目的一些代码,并考虑了所有我使用ajax调用的php页面,这些页面只是运行一个简单的更新或插入查询,并且让我觉得。如果我基本上可以从JavaScript运行插入或更新sql查询怎么办?通过ajax使用javascript和php来运行MySQL查询

假设我在服务器端使用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页面是每个运行一个单独的查询?

+4

安全威胁。它会工作,但你已经向公众公开了太多的信息。 – Raptor 2009-10-28 09:24:16

回答

10

不要这样做!

它将允许任何人做你喜欢的数据库!

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

+0

我想知道,如果我们使用在登录机制之后设置的会话(cookie),它仍然是问题吗? – NawaMan 2009-10-28 09:23:45

+0

完全同意Ghommey。您在JavaScript中拥有的所有内容都是可见的和可修改的。 – Egon 2009-10-28 09:23:52

+0

@NawaMan ...是的,因为任何能够登录的人都可以做任何事情...... – Egon 2009-10-28 09:25:43

0

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

尝试仅传递没有字段名称的数据。

0

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