javascript - 如何在系统中使用数据 html(投票)而无需用户更改值(检查)安全 100%

标签 javascript php html mysql ajax

我想使用ajax发送一个值(id_post),但是当用户将值更改为html(使用检查)时,检索到的值和新的值

html代码

<button  class="bt_like" data-id="<?php echo $row['id'] ;?>" >like</button>

代码php+sql

<?php 
require 'init.php';

$id_post     = $_POST['post'];
$id_user    = (int)trim(htmlspecialchars($_SESSION['user_id']));
$liked  = '1';

$stmt=$connect->prepare('INSERT INTO likes_emploi(id_post,id_user,liked) VALUES(:a,:b,:c)');

$stmt ->bindValue(':a',$id_post,PDO::PARAM_INT);
$stmt ->bindValue(':b',$id_user,PDO::PARAM_INT);
$stmt ->bindValue(':c',$liked,PDO::PARAM_INT);

$stmt->execute();  

ajax代码

$('.bt_like').on('click',function(){

var query = $('.bt_like').attr("data-id");
$.ajax({
    url : 'systemLike.php',
    method:'POST',
    data : {post:query},
    success : function(data){$('header').html(data); } /* no Important*/
});

});

结果:

<button  class="bt_like" data-id="15" >like</button>

一切正常 但是 问题是,如果用户单击检查(Chrome)将值 15 更改为 99,数据库收到的值为 99

最佳答案

这是不可避免的。但是,您可以混淆 ID,并与 session 中的值进行比较(例如)。

在 PHP 中:

session_start() ;
$_SESSION['posts'] = [] ;
while ($row = mysqli_fetch_array($res)) {

    $uniq = sha1(uniqid(true).$row['id']) ; // Example could be another thing.
    $_SESSION['posts'][$uniq] = $row['id'] ; 

    echo '<button  class="bt_like" data-id="' . $uniq . '" >like</button>' ;
}

最后,在收到 XHR 查询的 PHP 中:

session_start() ;
$sent_id = $_POST['post'] ;
$id_post = isset($_SESSION['posts']) && isset($_SESSION['posts'][$sent_id]) 
         ? $_SESSION['posts'][$sent_id] : 0 ;
if ($id_post) {
   // do stuff
} else {
   // Was changed by user! (or session was expired)
}

这样,所有访问者的 ID 都会不同。

当然,使用诸如 $_SESSION['posts'][...] = $id 之类的东西可能更有用,以避免混淆并根据需要清除数组。

关于javascript - 如何在系统中使用数据 html(投票)而无需用户更改值(检查)安全 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121094/

相关文章:

javascript - `/REG/g` 和 `new RegExp()` 之间有不同的行为吗?

javascript - 将 firestore DB 设置为窗口对象有多安全?

javascript - 具有大型动态表单的主干js

php - 提交时发送申请表并插入数据库

php - 在MVC架构中将AJAX的PHP文件放在哪里?

javascript - 绝对div定位算法使用

php - 加快大型 SQL 表的处理速度

html - 关于在 div 内包装文本的建议

HTML5 iframe 不会显示 url 源图像

javascript - 启动动画 onclick