PHP& Javascript:不安全吗?

时间:2011-09-08 16:24:14

标签: php javascript security

在PHP函数中嵌入PHP代码是不安全的吗? 我的朋友告诉我不要这样做。

如果已单击(读取)消息,我的脚本只会在数据库中插入一个数字。

<!--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&amp;在我的脚本中重新启动mysql?

4 个答案:

答案 0 :(得分:10)

你的朋友可能告诉过你不要这样做,因为它没有任何意义。

PHP是一种预处理语言,其解析器在Web服务器上运行。运行PHP的结果是浏览器看到的HTML / Javascript。您的PHP不输出任何内容(仅在生成HTML / Javascript页面时静默执行SQL查询),因此浏览器看到的Javascript是:

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

PHP根本不可能是“内部”的Javascript函数。没有这样的概念。

相反,当您稍微熟悉网络技术时,请考虑使用HTML form或阅读“AJAX”。

答案 1 :(得分:4)

如果您尝试该代码,它甚至不会那样工作。您无法在javascript函数中嵌入服务器端代码。

你想要的是做一个处理请求的sepearate请求。这种方法称为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注入攻击,因为此代码在当前状态下是难以理解的。

答案 2 :(得分:2)

这是不安全的,因为PHP完全有可能在打破javascript的页面中插入一些文本。 e.g。

<?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,然后是一个未终止的字符串文字';。 / p>

将PHP输出文本安全地放入JS代码块的正确方法是使用json_encode:

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

产生:

 var name = "O'Brien";

然后离开。

答案 3 :(得分:1)

PHP / MySql在Web服务器上运行。 Javascript在浏览器上运行。

您还应该认为来自浏览器的任何内容都可能是假的 - 因此应该验证/验证它。 Javascript只是让用户体验更具互动性,因为它不需要通过网络进行通信。使用AJAX或表单来进行通信。