2012-11-25 159 views
4

我有一個關於安全性的問題。我有一個Javascript變量:將JavaScript變量發送到PHP變量的安全性

var toSearch = "something" 

我想發送這個變量到另一個php頁面。我正在使用會話:<?php session_start(); ?>

從我讀過的我需要使用AJAX GET/POST過程將此JavaScript客戶端變量傳遞給PHP服務器端。

我知道這是可能的做到這一點:

window.location.href = "myphpfile.php?name=" + javascriptVariable; 

然後$_GET['name']變量。我讀過這不安全?是嗎?

+0

所以,你想將變量 'toSearch' 發送到PHP,然後引導他們到PHP與響應的頁面? – Prash

+0

在考慮安全性之前,請考慮在您的環境中是否有足夠的安全性來完成額外的工作。 –

+0

使用AJAX或使用JS重定向會有相同的安全問題,因爲兩者都在客戶端完成。 –

回答

2

這只是不安全的,取決於你對它做了什麼。任何人都可以在地址欄中輸入他們喜歡的任何內容,而且您無法控制該內容。舉例來說,我可以去

http://example.com/myphpfile.php?name=fuzzball 

現在,這本身並不危險,但如果我是把一些MySQL的代碼和你在MySQL數據庫中,沒有禁制直接放置這一點,那麼它的危險。如果我把HTML顯示給其他用戶,那麼這很危險。

所有你需要做的就是記住儘管GET和POST並不危險,但它們不能被信任爲你所期望的那樣,因此你應該確保它們在服務器端,它可以在那裏值得信賴。

+0

謝謝 - 所以當你說「沒有衛生的MySQL數據庫」時,有哪些核心要點? –

+1

Sae Us:做一個谷歌搜索,php:htmlspecialchars和php:mysql_real_escape_string。他們會做幾乎所有你需要的。另一個很好的PHP方法是trim() –

+0

htmlspecialchars和php:mysql_real_escape_string不是100%安全的,我也不會認爲它們「足夠好」,因爲發送非UTF-8字符(另一個SQL注入攻擊矢量)的危險。我建議轉換爲utf-8,然後在將變量插入查詢之前應用mysql_real_escape_string。更好的是,使用PDO。 http://php.net/manual/en/book.pdo.php這篇文章有更好的信息:http://stackoverflow.com/questions/5139127/php-sql-injection-utf8-poc –

1

那麼更好的解決方案是,如果你不想強制頁面重新加載,那麼請使用ajax請求。關於安全方面的相同,因此每個用戶都可以操控自如查詢字符串...我們有這個地址吧:)

window.XMLHttpRequest = window.XMLHttpRequest || window.ActiveXObject('MSXML2.XMLHTTP') || window.ActiveXObject('Microsoft.XMLHTTP'); 

var ajax = new XMLHttpRequest(); 

ajax.open('get', 'page.php?name=' + javascriptVariable, true); 

if (ajax.readyState == 4 && ajax.status == 200) 
{ 
    // ajax.responseText is the result from php server 
    // ajax.responseXML is the result from php server 
} 

ajax.send(null); 
-1

如果你不擅長JavaScript或Ajax請求,我建議jQuery的阿賈克斯方法。 jQuery的記錄非常好,適合初學者。

此外,您的變量設置不正確。應該是:

var toSearch = "something"; 

因此,請訪問:http://api.jquery.com/jQuery.ajax/即可開始使用。

如何做到這一點的示例。

JS:

function myFunction() { 

    var toSearch = "something"; 

    $.ajax({ 
     url: 'mysite/action_page.php?toSearch=' + toSearch, 
     success: function(data) { 
      alert('Here is some data from the $_GET request: ' + data); 
     } 
    }); 

} 

PHP:

<?php 
    /** 
    * I strongly suggest a security measure here 
    * ie: if($_GET['token'] != $_SESSION['token']) die('access not permitted'); 
    */ 


    //init 
    $search_string = ''; 

    //set 
    $search_string = htmlspecialchars(trim($_GET['toString']), ENT_QUOTES); 
    //TAKE A LOOK AT PHP.net IF YOU DON'T KNOW WHAT THE TWO METHODS ABOVE DO. 
    // will help prevent xss 

    echo $search_string; 

    //all done! 
?> 
+0

感謝這些要點凱文。 –