2011-09-08 72 views
-3

將PHP代碼嵌入到javascript函數中是不安全的嗎? 我的朋友告訴我不要這樣做。PHP和Javascript:不安全?

如果消息已被點擊(讀取),我的腳本只是在數據庫中插入一個數字。

<!--Insert into database when click--> 
<script> 
    function insert() 
    { 
     <?php 
     include 'db_connect.php'; 
     $usermsg = $_SESSION['username']; 
     $message_id = $_GET['messageid']; 
     mysql_query("UPDATE messages SET message_read='1' WHERE id='$message_id' AND to_user='$usermsg'"); 
     ?> 
    } 
</script> 

我應該這樣做嗎?或者在我的腳本中刪除包括php & mysql並重新開始?

+1

呃......那不會做任何事情。 – zellio

+0

你爲什麼不嘗試它的工作?正如Mimisbunnr所說,它不會做任何事情。 – Furicane

+0

我知道代碼不會做任何事情,但是在JavaScript函數中做PHP和Mysql是否安全? – Kaizokupuffball

回答

4

如果您嘗試該代碼,它甚至不會以這種方式工作。您不能在JavaScript函數中嵌入服務器端代碼。

你想要的是做出處理請求的分離請求。這種方法被稱爲AJAX。隨着jQuery庫可以使AJAX POST request這樣的:

<script> 
    function insert() 
    { 
     //Example: Request the test.php page and send some additional data along (while still ignoring the return results). 
     $.post("test.php", { messageid: "1" }); 
    } 
</script> 

在test.php的:

<?php 

    //Get Post Variables. The name is the same as 
    //what was in the object that was sent in the jQuery 

    if (isset($_POST['messageid'])) { 
     include 'db_connect.php'; 
     $usermsg = $_SESSION['username']; 
     $message_id = $_POST['messageid']; 
     mysql_query("UPDATE messages SET message_read='1' WHERE id='$message_id' AND to_user='$usermsg'"); 
    } 

?> 

閱讀Beginners Guide to Using AJAX with jQuery

而且不要忘了use parametrized sql防止SQL注入攻擊,因爲這在當前狀態下的代碼是不堪設想的。

+1

需要將驗證/驗證添加到此 - 即。檢查'$ usermsg'和'$ message_id'以確保它們是合理的值。 –

10

你的朋友可能已經告訴過你不要這樣做,因爲它沒有任何意義。

PHP是一種預處理語言,其解析器在網絡服務器上運行。運行PHP的結果是瀏覽器看到的HTML/Javascript。你的PHP不輸出任何東西(只是默默地執行SQ​​L查詢,而你的HTML/JavaScript頁面正在生成),讓你的瀏覽器看到的JavaScript是:

<script> 
    function insert() 
    { 
    } 
</script> 

PHP不能「內部」在JavaScript函數所有。沒有這樣的概念。

取而代之,可以考慮使用HTML form,或者在稍微熟悉Web技術規範時閱讀「AJAX」。

1

PHP/MySql在Web服務器上運行。 Javascript在瀏覽器上運行。

你也應該認爲來自瀏覽器的任何東西都可能是僞造的 - 因此應該驗證/驗證它。 Javascript只是讓用戶體驗更具交互性,因爲它不需要通過網絡進行通信。使用AJAX或表單來完成通訊。

2

這是不安全的,因爲它是完全可能的PHP插入一些文本到打破JavaScript的頁面。例如

<?php 
    $name = "O'Brien"; 
?> 

<script type="text/javascript"> 
    var name = <?php echo $name ?>; 
</script> 

這將產生:

var name = O'Brien; 

這是非法的JS語法。您正在分配一個未定義的變量O,緊接着是一個未終止的字符串文字'Brien。在PHP頁面引號圍繞這一無所作爲或者:

var name = '<?php echo $name ?>'; 
      ^     ^-- added quotes 

現在給

var name = 'O'Brien'; 

現在你已經有了一個稍微不同的問題:分配一個完全有效的字符串文字'O',緊接着一個未定義的變量Brien,後面跟着一個未終止的字符串文字';

有PHP輸出文本到一個JS代碼塊的正確方法是安全使用json_encode:

var name = <?php echo json_encode($name) ?>; 

主要生產:

var name = "O'Brien"; 

和您去。