阻止其他网站在PHP中向我的网站发送数据的最佳方法是什么?
我用谷歌搜索它,发现我需要使用哈希。但是有不同的哈希,哪一个使用?我们来说,我选择sha1
现在,我怎么能阻止其他网站使用sha1
我有点困惑,有人可以给我一些演示代码。
这是代码,我想,但它并不完美......
Index.php page:
$password = sha1("toby123");
<form method="post" action="insert.php" />
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="hidden" name="hiddenpass" value=" ".$password." "/>
</form>
插入数据库PHP页面:
$hiddenpass = "toby123"
if ( $_POST["hiddenpass"] == "sha1($hiddenpass )" )
{
// INSERT THE DATA
}
但问题在于,表单中的hash
代码对每个人都是可见的。如果有人破解它怎么办?
我的意思是,通过使用Hit&amp;试用方法???
我的方法是否100%安全?
修改
在查看其中一个答案后,这是我的新代码,但If条件始终为false。
Index.php Page
<?php
// Start the session
session_start();
$token = bin2hex(random_bytes(32));
if (!isset($_SESSION['token'])) {
$_SESSION['token'] = $token;
}
?>
Insert.php页面:
session_start();
echo $_SESSION['token'];
echo '<br/>';
echo $_POST['token'];
if ( ( isset($_SESSION['token']) ) && ( $_POST['token'] == $_SESSION['token'] ) )
{
// Insert Data
}
else
echo "<br/>Something went wrong";
unset($_SESSION['token']);
输出:
055442be59701631db6ed88dc341027ebf2238507bb9a72f1caefd6d3b126a4b
055442be59701631db6ed88dc341027ebf2238507bb9a72f1caefd6d3b126a4b
出了点问题
答案 0 :(得分:1)
您应该通过添加使用CSRF令牌来保护您的表单。 CSRF令牌应始终是随机的。 CSRF代表(Cross Site Request Frogery)
这是一种安全可靠的方法:
<?php
function random_token()
{
$token = bin2hex(random_bytes(32));
return $token;
}
function gentoken()
{
if (!isset($_SESSION['token'])) {
$_SESSION['token'] = random_token();
}
}
function checktoken($token)
{
if (isset($_SESSION['token']) && $token === $_SESSION['token']) {
deletetoken();
return true;
}
return false; // default
}
function deletetoken()
{
unset($_SESSION['token']);
}
?>
这里应该是你的表格
<form method="post" action="insert.php"/>
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type = "hidden" name="token" value="' . $_SESSION['token'] . '">
<input type = "submit" name="submit" value="Insert"/>
</form>
页面开始时,请写下:
gentoken();
**And to check for the token do this**
if (isset($_POST['submit'])) {
$token = $_POST['token'];
if (checktoken($token)) {
} else {
echo "Something wrong happened"; //When the token is changed or doesn't match!
}
}
备注:强>
random_bytes()
生成安全的加密字节,不需要进行哈希处理!
我希望这有帮助。祝你好运!
答案 1 :(得分:-1)
而不是使用&#34; toby123&#34;使用很多cmplex和长随机生成的字符串。 为了更加安全,您可以使用两个哈希值。
session_start();
// if there is data submitted
if(isset($_POST['submit'])){
$password1 = $_SESSION['password1'];
$password2 = $_SESSION['password2'];
//check these passwords
if($_POST['password1']==$password1 && $_POST['password2']==$password2){
// code to pe processed
}else{
echo '<h1>FORBIDDEN</h1>';
}
}else{
$rand1 = md5(uniqid().mt_rand());
$rand1 = md5(uniqid().mt_rand().uniqid());
$password1 = sha1($rand1);
$password2 = sha1($rand2);
$_SESSION['password1'] = $password1;
$_SESSION['password2'] = $password2;
}