백엔드 개발 PHP 튜토리얼 php防止远程提交表单的有关问题

php防止远程提交表单的有关问题

Jun 13, 2016 pm 01:24 PM
lt name quot session token

php防止远程提交表单的问题。
在网上找到一段防止远程提交表单的demo,它用的是md5(uniqid(rand()))生成令牌验证的方法,如下:

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php session_start();

if ($_POST['submit'] == “go"){
    //check token
    if ($_POST['token'] == $_SESSION['token']){
        //strip_tags
        $name = strip_tags($_POST['name']);
        $name = substr($name,0,40);
        //clean out any potential hexadecimal characters
        $name = cleanHex($name);
        //continue processing….
    }else{
        //stop all processing! remote form posting attempt!
    }
}

$token = md5(uniqid(rand(), true));
$_SESSION['token']= $token;

function cleanHex($input){
    $clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);
    return $clean;
}

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"&gt;
<p><label for="name">Name</label>
<input type="text" name="name" id="name" size="20″ maxlength="></p>
<input type="hidden" name="token" value="&lt;?php echo $token;?&gt;">
<p><input type="submit" name="submit" value="go"></p>

?&gt;


로그인 후 복사


我的问题是:
如果保存sessionID的cookie可以被找到,那不就可以在远程提交这个表单,然后通过一些操作修改请求的header头,把获取的cookie放进去。
如果上面这种方法可行的话,那这段代码不就不能起到防止远程提交表单的作用了吗?

------解决方案--------------------
这个不一定吧!session的定义是在服务器端生成一个session文件,并放在服务器端,并生成一个session_id,通过cookie放到客户通,当你访问session的时候会用到客户端的session_id;但是是不是可以直接这个session_id去访问服务端的session文件,这个并不清楚,若有方法的话,那就可以通过session_id直接访问session信息了,这个防止远程表单提交的就不起作用了,反之,则ok!
------解决方案--------------------
sessionID 是动态的,找到了也没有!

不过你的这个代码只能方式静态表单的提交。并不能防止机器人提交
只要先进入你的页面(当然是需要的,因为要知道你的表单是否变化了),于是你那宝贵的 token 就到我手上了,然后就.....
------解决方案--------------------
用户能访问的, 计算机一样可以搞.

先访问表单页面正则取TOKEN, 然后提交表单把TOKEN也一起提交了.
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 SpringBoot 세션에서 세션 시간 초과를 설정하는 방법 May 15, 2023 pm 02:37 PM

SpringBoot 세션에서 세션 시간 초과를 설정하는 방법

세션 실패를 해결하는 방법 세션 실패를 해결하는 방법 Oct 18, 2023 pm 05:19 PM

세션 실패를 해결하는 방법

잘못된 로그인 토큰 문제를 해결하는 방법 잘못된 로그인 토큰 문제를 해결하는 방법 Sep 14, 2023 am 10:57 AM

잘못된 로그인 토큰 문제를 해결하는 방법

PHP 세션 교차 도메인 문제에 대한 솔루션 PHP 세션 교차 도메인 문제에 대한 솔루션 Oct 12, 2023 pm 03:00 PM

PHP 세션 교차 도메인 문제에 대한 솔루션

로그인 토큰이 유효하지 않은 경우 수행할 작업 로그인 토큰이 유효하지 않은 경우 수행할 작업 Sep 14, 2023 am 11:33 AM

로그인 토큰이 유효하지 않은 경우 수행할 작업

세션 PHP의 기본 만료 시간은 얼마입니까? 세션 PHP의 기본 만료 시간은 얼마입니까? Nov 01, 2022 am 09:14 AM

세션 PHP의 기본 만료 시간은 얼마입니까?

새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? 새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까? Jan 18, 2023 pm 01:39 PM

새로 고침 후 PHP 세션이 사라지면 어떻게 해야 합니까?

Vue3+Vite가 듀얼 토큰을 사용하여 무의미한 새로 고침을 달성하는 방법 Vue3+Vite가 듀얼 토큰을 사용하여 무의미한 새로 고침을 달성하는 방법 May 10, 2023 pm 01:10 PM

Vue3+Vite가 듀얼 토큰을 사용하여 무의미한 새로 고침을 달성하는 방법

See all articles