2016-12-20 48 views
-1

我一直只使用JavaScript進行編程,現在我想使用一些數據庫並學習SQL。我想知道,如果它是常見的,安全的態度,在發送Ajax請求的SQL語句,比如像這樣:javaScript中的SQL語句AJAX請求

xhttp= new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    //something 
    } 
}; 
var sql = 'SELECT * FROM Customers'; //creating SQL statements in JS like this 
xhttp.open("GET", "getFromDatabase.php?q="+sql, true); 
xhttp.send(); 

//PHP: 
$result = mysqli_query($con,$q); 
echo $result; 

,而不是保持和生成所有必要的SQL語句在AJAX開放指示的PHP文件中()這樣的:

xhttp= new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
    //something 
    } 
}; 
xhttp.open("GET", "getFromDatabase.php?q=getCustomers", true); 
xhttp.send(); 

//PHP: 
if ($q==="getCustomers") { 
    $sql="SELECT * FROM Customers"; //here are ALL SQL statements 
    $result = mysqli_query($con,$sql); 
    echo $result; 
} 

所有互聯網我讀過了傾向於第二種attitube的教程和樣本,但對我來說 - 誰不知道PHP,並不想了解在這個時候 - 第一種(JS)態度會更容易,僅僅用於學習和測試如何處理數據庫。然後,我可以創建一個簡單的PHP文件,僅用於返回帶有一些數據的JSON和其他所有的JavaScript文件。

+2

這就是你的整個數據庫如何被盜/刪除...不要這樣做...他們需要在PHP ....如果不是任何人都可以運行SQL請求。 – epascarello

+1

被盜或有人打開控制檯並通過「DROP TABLE Customers'語句執行請求 –

+1

由於用戶可以訪問的工具,惡意人員將能夠修改和利用此類代碼,並且您可以獲取數據泄露。 –

回答

0

嗯...我會建議你使用標誌...在ajax請求中發送不同的標誌以執行php中的不同查詢...... php腳本將獲得標誌並決定運行哪個查詢...

+0

比OP的想法好得多,一旦有200或300個查詢在生產中運行,仍然很難維持。 – Doug

2

答案是「NO!」。請不要這樣做。這會打開你的數據庫,用於SQL注入攻擊和其他安全不友好的事情。

如果您想學習如何使用SQL,請使用PHP,Node.js,Python或其他語言編寫RESTful服務,以輕鬆學習語言並在後端運行SQL。

永遠不要將字符串從UI直接傳遞到數據庫,而無需正確參數化。