如何防止其他网站通过PHP

时间:2017-08-23 08:17:59

标签: php

阻止其他网站在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

     

出了点问题

2 个答案:

答案 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;
}