like 代码php+sql prepare('INSERT INTO-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:53:14 26 4
gpt4 key购买 nike

我想使用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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com