로컬 서버의 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
'programing' 카테고리의 다른 글
MariaDB, 테이블이 나열되지만 찾을 수 없습니다. 데이터 정렬이 "사용 중"입니다. (0) | 2023.08.26 |
---|---|
Javascript 라이브러리 및 CSS 폴더 구조 구성을 위한 모범 사례 (0) | 2023.08.26 |
배구 시간 제한 기간 변경 (0) | 2023.08.26 |
IOS swift 앱에서 탭 모음 숨기기 (0) | 2023.08.20 |
스위프트에게 말하는 방법중첩된 관찰 가능 개체에 바인딩할 UI 보기 (0) | 2023.08.20 |