在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?
答案 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或表单来进行通信。