老实说,我认为这个问题离题了,因为它的主题是一个非常普遍的概念,可以应用于任何能够处理web开发的语言。这比一般的PHP问题还要广泛。
顺便说一句,我想建议的太多了,不能发表评论。
当您需要检查来自受信任用户的数据时(假设您已经有了检查用户是否受信任的方法),需要建立一个系统来进行数据完整性检查。
一个简单的例子。假设您有如下表单:
<?php $data = get_my_form_data(); ?>
<form method="post">
<input type="hidden" name="postid" value="<?= $data[\'postid\'] ?>">
<input type="text" name="vote" value="<?= $data[\'vote\'] ?>">
<input type="text" name="username" value="<?= $data[\'username\'] ?>">
<form>
检索数据的函数只是一个占位符,用于明确数据来自服务器,然后用于填充表单值。
现在让我们看看如何实现数据完整性。通常通过双向(可逆)加密完成。
<?php
function obfuscate_postid($id) {
return wp_create_nonce(\'pre-md5\').md5($id.AUTH_SALT).wp_create_nonce(\'post-md5\');
}
$data = get_my_form_data();
$check = obfuscate_postid($data[\'postid\']);
?>
<form method="post">
<input type="hidden" name="postid" value="<?= $data[\'postid\'] ?>">
<input type="text" name="vote" value="<?= $data[\'vote\'] ?>">
<input type="text" name="username" value="<?= $data[\'username\'] ?>">
<input type="hidden" name="__ch" value="<?= $check ?>">
<form>
这样,在服务器端处理中,您可以检查
$valid = obfuscate_postid($_POST[\'postid\']) === $_POST[\'__ch\'];
如果用户更改表单中的post id而不更改检查字符串,
$valid
以上为false,您可以停止处理数据。
我使用了一种非常简单的双向模糊处理,由于nonce没有及时固定,这是一种非常有效的保护数据的方法。
我还使用了nonce使答案与WordPress更相关;)
如果nonces只能使用一次,那么它将是一个非常强大的系统,但它是一个投票后系统,而不是一个网上银行应用程序。如果你愿意,你也可以change nonces TTL.
最后,请注意我是如何使用salt使md5更加安全的,因为即使md5不可逆,也可以很容易地找到唯一整数的md5结果(例如,trythis 使用字符串b706835de79a2b4e80506f582af3676a
).