在javascript函数中嵌入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 &Mysql在我的脚本和开始吗?
你的朋友可能告诉你不要这样做,因为这没有任何意义。
PHP是一种预处理语言,其解析器运行在web服务器上。运行PHP的结果是浏览器看到的HTML/Javascript。你的PHP不输出任何东西(只是默默地执行SQL查询,而你的HTML/Javascript页面正在生成),所以浏览器看到的Javascript是:
<script>
function insert()
{
}
</script>
PHP根本不能"在"Javascript函数中。没有这样的概念。
相反,考虑HTML form
,或者在您稍微熟悉web技术层次结构时阅读"AJAX"。
如果您尝试该代码,它甚至不会这样工作。你不能在javascript函数中嵌入服务器端代码。
您需要的是创建一个单独的请求来处理该请求。这种方法称为AJAX。使用jQuery库,您可以像这样发出AJAX POST请求:
<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'");
}
?>
阅读jQuery AJAX入门指南
不要忘记使用参数化sql来防止sql注入攻击,因为这些代码在当前状态下是容易受到攻击的。
这是不安全的,因为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";
PHP/MySql运行在web服务器上。Javascript在浏览器上运行。
你也应该认为来自浏览器的任何东西都可能是伪造的-因此应该验证/验证它。Javascript只是使用户体验更具交互性,因为它不需要通过网络进行通信。使用AJAX或表单来完成通信