2010-12-21 77 views
0

我很新的PHP,快速注意這是一個Android應用程序,我打電話給這個腳本,我沒有用戶組成腳本哈哈。有一系列複選框,當它們檢查某些複選框時,它會將腳本附加到字符串構建器。我試圖運行一個基於正在傳入的變量的值的查詢。通常我做這樣的事情,Php腳本,查詢從傳遞的值中運行

mssql_query("UPDATE Userdata SET BrowseScript = '".$_REQUEST['sqlscript']."' 
WHERE Userdata.Username = '".$_REQUEST['Username']."'"); 

和它說的地方。 $_REQUEST['']能搶我,我傳遞值。

但此時.$_REQUEST['']是整個劇本,所以我想是這樣的

mssql_query($_REQUEST['sqlscript']); 

和多數民衆贊成它,我希望它運行在查詢這就是值,查詢是正確的,但它只是不會返回任何值,我想我可能有某種類型的語法錯誤或什麼的,就像我說我是新來的PHP。謝謝你的幫助。此外,我不發佈整個代碼,因爲一切運行正常,我只是不能讓該查詢運行。所以我需要幫助的是mssql_query部分再次感謝。

+0

在插入到db之前對輸入進行健全性檢查,請參閱sql注入谷歌 – 2010-12-21 08:18:59

回答

0

首先是你在做什麼巨大的安全漏洞。您應始終使用mysql_real_escape_string或準備好的語句來清理並避免在查詢中使用的變量。

由於您正在爲您的查詢導入整個腳本,因此可能是引號不會轉義。你需要把這些功能你這樣的變量之前:

mysql_real_escape_string($_REQUEST['your_var']); 

本身使用$_REQUEST,而不是正確$_GET$_POST是脆弱的。

+0

sooo,你能告訴我我的ms_query行怎麼看?並說mysql – user516883 2010-12-21 08:31:39

+0

@ user516883:只需在查詢變量之前加上'mysql_real_escpae_string'函數,例如'mssql_query(「UPDATE Userdata SET BrowseScript ='」.mysql_real_escpae_string($ _ REQUEST ['sqlscript'])。'' WHERE Userdata.Username = '「.mysql_real_escpae_string($ _ REQUEST ['Username'])。''」);' – Sarfraz 2010-12-21 08:33:39

+0

我不跟着?我沒有運行這樣的查詢查詢是一個正在通過 – user516883 2010-12-21 08:53:06

0

對於所有這些都是聖潔的,不要這樣做!

你做不是只是使用請求參數,並把它們放在SQL查詢。你至少使用mysql_real_escape_string(或任何MSSQL的等價物,從來沒有使用它)。而且你絕對不會接受請求中的整個查詢,並且不可見地執行它們。

您正在打開巨大的安全漏洞。尤其是如果你是新人,在它成爲習慣之前,立即停下來!

example.com/foo.php?sqlscript=DROP TABLE users 

最低要求演講:http://www.php.net/manual/en/security.database.sql-injection.php

0
  1. 告訴你的腳本輸出的$ _REQUEST的內容[ 'sqlscript']

    回聲$ REQUEST [ 'sqlscript'];

  2. 檢查輸出是否正確。你可能會發現有一些解析錯誤,或者只是你的腳本不完整。檢查報價(「)並確保查詢有效。

  3. 此外,您應該從不從請求運行腳本。想象一下,如果有人瀏覽到您的網站並輸入

    youtsite.com?sqlscript ='drop * from tables';

您的整個數據庫將被擦除。

+0

它的Android應用程序並沒有涉及的網站傳遞的vlalue,並且用戶沒有提供SQL腳本有一系列複選框,並且當他們點擊stringbuilder創建運行的SQL腳本。 plese幫助完整的ms_sql代碼,謝謝! – user516883 2010-12-21 08:35:13

+0

可以輸出echo $ REQUEST ['sqlscript']的值; – mrwooster 2010-12-21 08:36:52

+0

這裏是我如何從我所有的PHP腳本獲取數據,除了我現在要發佈的內容,我不知道。 while($ e = mssql_fetch_assoc($ q)) $ output [] = $ e; print(json_encode($ output)); mssql_close(); – user516883 2010-12-21 08:50:06