2009-10-28 34 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。