2012-07-30 42 views
3

在我的网站中,我为会话对象设置了一些值,如“user_status”,“user_name”等。 PHP文件看起来是这样的:检索一个php值,并在javascript中使用它

<script type="text/javascript"> 
    var logged = <? echo $this->session->getValueOf("user_status"); ?>; 
</script> 

<a class="show_message" href="#">SHow my status</a> 

嗯,我有一种谎称根据网站user status做一个动作一个js脚本,所以,我有这样的:

$('.show_status').click(function(event){ 

    //ask for user status 
    if (logged){ 
     //do something 
    } 
    else{ 
     //do another action for visitors 
    } 
}); 

走在我以为如果它是流量数据在session - >javascript之间的最佳方式,因为如果您在浏览器中检查页面源,则会看到user_status的值,并且可能会对网站安全造成风险。

在此先感谢

编辑:

  1. logged VAR只需要一个布尔值。
  2. 每次单击元素#(".show_status")时必须执行js操作。
+1

*走动我有丁字裤* - 有史以来最好的。 – 2012-07-30 03:15:04

+0

真的,如果简单地阅读(登录)用户的状态是一个高度威胁的安全威胁,*该死的**,**你有问题***。 – 2012-07-30 03:16:17

+0

@JaredFarrish我认为你需要四处走动,并且长一点。 – 2012-07-30 03:17:09

回答

3

如果JavaScript只是用于界面的东西,并没有任何后端效应,我可能不会太担心处理逻辑客户端的不安全性。

如果安全性是一件重要的事情,我会建议您使用PHP来编写适当的JavaScript函数。例如:

在页面被查看,也许在标题中,有:

<script type="text/javascript"> 
    <?php 
    if ($this->session->getValueOf("user_status")) { 
     require_once('logged_in_user_functions.js'); 
    } else { 
     require_once('visitor_functions.js'); 
    } 
    ?> 
</script> 

在文件`logged_in_user_functions.js'你有:

function showComment(id) { 
    //logic that shows the comment here 
} 

function showCommentSubmissionForm() { 
    //logic that adds this form to the page goes here 
} 

同时,在文件'visitor_functions.js'你有:

function showComment(id) { 
    //logic that shows the comment in a different way goes here 
} 

function showCommentSubmissionForm() { 
    //logic to display a message saying the user needs to log in to post a comment goes here 
} 

然后你可以添加你的逻辑与您的网页不必检查用户状态。正确的行为是凭借这.js文件规定被列入:

<button id='add_comment_button' onclick='showCommentSubmissionForm()'>Add Comment</button> 

这给PHP(因此服务器,而不是客户端)说了算什么被显示给用户。

+0

我不会建议内联代码执行来实现受限制的动作。简而言之,JavaScript不应该首先执行任何与私人访问相关的类型内容。您可以通过JavaScript控制台操作UI,但在一天结束时,服务器就是数据I/O的执行者。在这种情况下,我会设置一个常量或定义一个配置。 – 2012-07-30 03:25:14

+1

嗯,我喜欢这种方法,唯一的“负面”部分是,我的PHP标记变得如此混乱 – manix 2012-07-30 03:26:00

+1

@manix,混沌如何?你的意思是,开始和结束php标签只是看起来丑陋?我不能不同意,但在功能上并不是那么糟糕。你可以做的一件事就是使用相同的代码大纲来导入(使用'require_once')相应的JavaScript函数。这样可以将整个逻辑保存在一组''标记中,并且可以根据需要导入适当版本的多个JavaScript函数。 – 2012-07-30 03:30:35

2

假设user_status将类似于Active,那么这不是一个真正的安全风险。

如果你想隐藏所有的,你可以尝试使用加密的cookie,使用类似How to save encrypted data in cookie (using php)?的东西来加密你的值。

+0

是的,'user_status'只能取值为'1'或'0',而且cookie实际上是加密的 – manix 2012-07-30 03:20:38

相关问题