2013-05-03 151 views
1

我對AJAX非常陌生。我看到這個教程瞭解如何使用AJAX從URL http://www.w3schools.com/php/php_ajax_database.aspAJAX安全問題

源代碼檢索數據庫的結果:

<script> 
function showUser(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getuser.php?q="+str,true); 
xmlhttp.send(); 
} 

是足夠的代碼安全嗎? 我需要檢查除安全性的服務器端驗證之外的其他任何問題嗎? 有關應用該代碼的安全性的最佳做法是什麼?

謝謝,我真的很抱歉,這個愚蠢的問題。 T_T

+0

壞資源總是會引起我的意思是,請不要使用w3school – 2013-05-03 07:03:53

+2

文章中的PHP代碼使用折舊'mysql_ *'功能*和*是完全容易受到SQL注入的問題。客戶端代碼不會影響服務器端安全性(該示例代碼中不存在),但應注意XSS攻擊並妥善清理所有用戶輸入。 – Blender 2013-05-03 07:05:08

+0

是的,我不再使用那個mysql_。我剛剛瞭解到這個AJAX。順便說一句,我真的需要加密JavaScript中的'str',然後在php中解密以獲得額外的安全性嗎? – 2013-05-03 08:02:32

回答

1

「足夠安全」部分取決於您在服務器端執行的操作。在客戶端,這裏有一個缺少的部分,「str」值被編碼爲正確的URL值,因此可能會導致一些問題。

連接url部分時,您至少應該使用encodeURIComponent(或escape)方法。

xmlhttp.open("GET","getuser.php?q="+encodeURIComponent(str),true); 
+0

感謝您的回答。我認爲這個encodeURIComponent和php中的urlencode()是一樣的嗎? – 2013-05-03 07:46:40

+1

是的,它非常相似,請參閱文檔:https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/encodeURIComponent – naivists 2013-05-03 07:49:50