programing

로컬 서버의 Ajax를 통해서만 PHP 파일에 액세스 허용

codeshow 2023. 8. 26. 00:05
반응형

로컬 서버의 Ajax를 통해서만 PHP 파일에 액세스 허용

사용자 상호 작용을 기반으로 데이터베이스의 값을 증가시켜야 하는 웹 사이트가 있습니다.사용자가 버튼을 클릭하면 값을 증가시키는 php 스크립트가 호출됩니다.외부 스크립트가 이 스크립트에 액세스하지 못하도록 보호합니다.현재 사용자는 동일한 php 파일을 반복적으로 눌러 데이터베이스의 값을 날려버리는 Javascript 기능으로 자신의 웹 페이지를 작성할 수 있습니다.

다음은 증분을 수행하는 제 jquery 코드입니다.

jQuery(function(){
$('.votebtn').click(function(e){
    var mynum = $(this).attr('id').substring(0,5);
    $.ajax({
            url:"countvote.php",
            type:"GET",
            data: { 
                thenum:mynum
            },
            cache: false,
            success:function(data) {
                alert('Success!');
                }
            }
        });
});
});

로컬 서버에 있는 ajax/jquery의 호출만 'countvote.php'에 액세스할 수 있도록 하려면 어떻게 해야 합니까?만약 그것이 올바른 방법이 아니라면, 저는 제 php 스크립트가 외부 스크립트에 의해 남용되는 것을 막을 수 있는 어떤 제안도 받아들일 수 있습니다.

솔루션에는 두 단계가 필요합니다.

첫째, Ajax 파일은 이 코드를 가진 Ajax 요청에서만 액세스를 허용해야 합니다.

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if(!IS_AJAX) {die('Restricted access');}

두 번째로 Ajax 파일은 $_SERVER[] 명령을 사용하여 호출하는 파일 이름으로 액세스할 수 있습니다.HTTP_REFERER'].따라서 호스트 서버에서만 액세스를 제한할 수 있습니다.

$pos = strpos($_SERVER['HTTP_REFERER'],getenv('HTTP_HOST'));
if($pos===false)
  die('Restricted access');

아마도 코드는 두 번째 부분에서만 작동할 수 있습니다.

다음의 경우 확인할 수 있습니다.$_SERVER['HTTP_X_REQUESTED_WITH']동등한xmlhttprequest그러나 요청이 AJAX 요청인지 여부를 결정하는 신뢰할 수 있는 방법은 아닙니다. 항상 이 문제를 해결할 수 있는 방법이 있습니다.그러나 잘못 입력된 URL, 크롤러 등과 같은 임의의 히트로부터 보호합니다.

그렇게 하는 방법은 실제로 100%가 아닙니다.AJAX 요청은 항상 클라이언트에서 전송됩니다.GET 대신 POST 요청을 사용하면 문제를 방지하는 데 도움이 되지만 완전히 중단하지는 않으며 php에서 모든 get 요청을 삭제합니다.

이것이 효과가 있을지 확신할 수 없지만, index.php와 같은 API 키를 a로 설정하는 것은 어떻습니까?$_SESSION변수, 만약 당신이 수동으로 하지 않는다면, 이것을 사용자가 볼 수 없을 것이다, 그리고 제한된 php 파일에서,$_SESSION['VOTEAPIKEY']무엇이든

언급URL : https://stackoverflow.com/questions/15436948/allow-access-to-php-file-only-through-ajax-on-local-server

반응형