2010-12-19 72 views
0

嘿,我正面临着一个相当严重的安全错误。让我先概述一下我的代码。编辑评论 - javascript,php一起工作

<li class="comment"> 
    <form action="" method="POST" name="edit-form" class="edit-area"> 
     <textarea style="width: 100%; height: 150px;"><?php echo $response->comment; ?></textarea> 
    </form> 

    <div class="comment-area" style="padding-top: 2px"><?php echo (parseResponse($response->comment)); ?></div> 

     <p class="ranking"> 
      <?php if ($response->user_id == $user_id) : ?> 
        <a href="" class="editting" data-user="<?php echo md5(convert($response->user_id)); ?>" data-edit="<?php echo $response->short; ?>">Edit</a> &bull; <a href="#d">Delete</a> 
      <?php else : ?> 
       <a href="#">Like (<?php echo $response->likes; ?>)</a> &bull; <a href="#">Dislike (<?php echo $response->dislikes; ?>)</a> 
      <?php endif; ?> 
     </p>           
</li> 

是我在我的身上了,和这里的相关JS

$('.editting').bind('click', function(event) { 
      var num = $(this).data('edit'); 
      var user = $(this).data('user'); 

      if ($(this).hasClass('done')) { 

       var newComment = $('#comment-' + num + ' .edit-area textarea').val(); 
       var dataString = 'newComment='+ newComment + '&num=' + num; 

       if(newComment == '') 
       { 
        alert('Comment Cannot Be Empty!'); 
       } 
       else 
       { 
        $.ajax({ 
         type: "POST", 
         url: "edit.php", 
         data: dataString, 
         success: function(){} 
        }); 

        $('#comment-' + num + ' .edit-area').slideDown('slow', function() { 
        $('#comment-' + num + ' .edit-area').addClass('invisible'); 
        });  
        $('#comment-' + num + ' .comment-area').slideUp('slow', function() { 
         $('#comment-' + num + ' .comment-area').removeClass('invisible'); 
        }); 
        $(this).removeClass('done'); 
        $(this).html('Edit'); 
       } 



      } 

      else {     
       $('#comment-' + num + ' .comment-area').slideDown('slow', function() { 
        $('#comment-' + num + ' .comment-area').addClass('invisible'); 
       }); 

       $('#comment-' + num + ' .edit-area').slideUp('slow', function() { 
        $('#comment-' + num + ' .edit-area').removeClass('invisible'); 
       }); 

       $(this).html('Done'); 
       $(this).addClass('done'); 


      } 

      return false; 


     }); 

,工作正常,但我有一个问题。如果用户发现评论(而不是他们)并使用像萤火虫一样的插件,他们可以用另一个替换response-> short,并编辑任何评论。当然,在edit.php中,我可以检查响应表中的短小内容,看看用户是否签出,但是我想找到一种不显示文本区域的方式,除非该用户确定该响应。

这可能吗?

由于提前, 请问

回答

3

这可能吗?

当然......但它不会阻止用户/修复您的安全漏洞。修复此问题检查服务器端总是仔细检查任何应该安全的服务器端,永远不要相信您的输入。用户尝试做一些恶意的事情不会被JavaScript中的任何东西拦截......发送数据到你的服务器,他们不应该是刚好他们会先做什么。

+0

好,我打算做的事情edit.php反正所以我确定它是有效的,但是无论如何我还可以强化js/ – willium 2010-12-19 10:03:21

+0

@tap - 没有太多的事情你还没有做,JavaScript是**开放的,这只是它是怎么回事......我可以打开一个编辑窗口,对这个页面的任何评论以及... *服务器*不会允许它,这是重要的。回到这里,看看你正在尝试做什么......你试图让这个界面更好一些,以帮助某人尝试*操纵你的网站,我不会做任何额外的事情为此,只需在服务器端确保它的安全性,为其他99.9%的用户设计接口(并且仍然安全,重要!) – 2010-12-19 10:07:03

+0

好的!谢谢尼克! – willium 2010-12-19 10:10:42

0

像尼克说的那样;永远不要相信JavaScript测试!

它可能适用于“普通用户”,但是当它涉及到避免黑客入侵时,您还可以要求黑客单击按钮来“证明”他的输入是有效的!

您的验证脚本被别人的电脑上运行,那么他/她就可以操纵它(甚至把它使用的NoScript等)