2011-09-08 39 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"; 

和您去。