2014-05-11 47 views
0

我正在尋找一種通過ajax將敏感變量傳遞給php文件的安全方式。目前,我一直在使用數據屬性,但可以使用類似螢火蟲的值來更改這些值。在點擊事件上傳遞敏感變量的最佳方法?

HTML:

<div class="strip"> 
    <?php 
     if($hide == 0) { 
      echo '<h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="0">Hide Business</h2>'; 
     } 
     if($hide == 1) { 
      echo '<h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="1">Un-Hide Business</h2>'; 
     } 
    ?> 
    <h2 class="action" data-type="1" data-id="<?php echo $id; ?>" data-action="2">Delete Business</h2> 
</div> 

的JavaScript/JQuery的:

$(".action").click(function() { 
    var type = $(this).data("type"); 
    var id = $(this).data("id"); 
    var action = $(this).data("action"); 

    $.ajax({ 
     url : 'assets/php/confirm.php', 
     type : 'POST', 
     data : "type="+type+"&action="+action+"&ids="+id, 
     success : function (result) { 
      alert(result); 
     } 
    }); 
}); 

PHP:

if(isset($_POST['type'], $_POST['action'], $_POST['ids'])) { 
    $type = $_POST['type']; 
    $action = $_POST['action']; 
    $ids = explode(",", $_POST['ids']); 
    $count = count($ids); 

    if($type == 0) { 
     if($action == 1) { 
      $stmt = $mysqli->prepare("DELETE FROM deals WHERE id=?"); 
     } else { 
      $stmt = $mysqli->prepare("UPDATE deals SET hide=0 WHERE id=?"); 
     } 
    } else { 
     if($action == 1) { 
      $stmt = $mysqli->prepare("DELETE FROM businesses WHERE id=?"); 
     } else { 
      $stmt = $mysqli->prepare("UPDATE businesses SET hide=0 WHERE id=?"); 
     } 
    } 

    for($i = 0; $i < $count; $i++) { 
     $stmt->bind_param('s', $ids[$i]); 
     $stmt->execute(); 
     $stmt->close(); 
    } 
    echo 'Success updated '.$_POST['ids']; 
} 

需要是安全的變量是數據類型,數據ID,數據操作值。原因是我不想刪除錯誤的數據庫條目。 我不知道任何替代品,所以任何幫助將是偉大的。

+0

任何客戶端必須被視爲公衆,所以在沒有任何服務器端檢查的情況下,不應將敏感數據發送給客戶端。因此,檢查服務器端用戶可以對這些敏感數據做他想做的事情 –

+1

任何事情都可能被篡改,而不僅僅是數據屬性。您可以在沒有瀏覽器的情況下發送請求事件,所以...只需使用適當的驗證 –

回答

1

如果您想停止用戶更改它們,那麼您根本無法從用戶那裏獲取它們。請將數據存儲在服務器上。

如果您想限制您將接受來自用戶的值,請將其限制在服務器上。執行認證和授權。確保所更改的值是允許登錄的用戶更改的值。

+0

如何檢查它是否已經從其原始值進行更改? 'id'和'type'我可以與數據庫值進行交叉檢查,但行動我不知道我會如何去做。 – ChristopherStrydom

+0

缺少存儲原始值(在這種情況下,將值發送到客戶端並返回沒有意義),您無法檢查它是否已從其原始值進行更改。您只能檢查服務器接收的值是否可接受(無論您想要設置什麼條件來描述可接受的內容)。 – Quentin

0

由於客戶對你的代碼 - 在瀏覽器中 - 不能隱藏,你應該保護客戶端和Web服務器之間的連接 - 使用SSL/TSL爲...

+1

該值在發送前可以更改嗎? – ChristopherStrydom

+0

客戶端上的任何內容都可以更改 - 如果您想阻止它不發送給客戶端... –

相關問題