PHP 및 AJAX 보안 질문
저는 현재 jQuery의 $.ajax 함수를 사용하여 PHP 파일을 메인 파일로 로드하는 웹 앱을 구축하고 있습니다.그러나 PHP 파일은 주소 표시줄에 파일 이름을 입력하기만 하면 앱 외부에서 여전히 액세스할 수 있습니다.
그래서 제 질문은 에서 '액세스' 중인 PHP 파일이 올바른 페이지에 포함되어 있고 올바르게 작동한다는 것을 알 수 있도록 만드는 가장 좋은 방법이 무엇인지에 대한 것입니다. 하지만 만약 다른 방법으로 액세스된다면(누군가가 내 PHP 파일에 자신의 웹 사이트와 AJAX를 만들더라도) 파일은 "액세스 거부" 또는 다른 것으로 표시되어야 합니다.
잘 부탁드립니다.
구글을 많이 검색한 후에 답변을 마쳤습니다!
1단계 : 모든 웹 서비스에 대한 토큰 시스템 생성:
토큰 생성 중:
<?php
session_start();
$token = md5(rand(1000,9999)); //you can use any encryption
$_SESSION['token'] = $token; //store it as session variable
?>
2단계 : Ajax 호출을 보낼 때 사용합니다.
var form_data = {
data: $("#data").val(), //your data being sent with ajax
token:'<?php echo $token; ?>', //used token here.
is_ajax: 1
};
$.ajax({
type: "POST",
url: 'yourajax_url_here',
data: form_data,
success: function(response)
{
//do further
}
});
3단계: 자, 이제 에이잭스 핸들러 PHP 파일을 보호해 보겠습니다.
session_start(); //most of people forget this while copy pasting code ;)
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
//Request identified as ajax request
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//HTTP_REFERER verification
if($_POST['token'] == $_SESSION['token']) {
//do your ajax task
//don't forget to use sql injection prevention here.
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
}
else {
header('Location: http://yourdomain.com');
}
참고: 중첩된 경우 죄송합니다.그렇지 않으면 이해력이 향상됩니다. 그렇지 않으면 세 가지 모두를 하나로 단순화할 수 있습니다. 보안이 85% 향상되었습니다!
비슷한 토론에서 Eran Galperin의 말을 인용합니다.
다른 사람들이 말했듯이, Ajax 요청은 적절한 헤더를 만들기 위해 에뮬레이트될 수 있습니다.요청이 Ajax 요청인지 여부를 확인하기 위해 기본적으로 확인하려면 다음을 사용할 수 있습니다.
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }
그러나 이 검사를 기반으로 보안을 설정해서는 안 됩니다.필요한 경우 페이지에 직접 액세스할 필요가 없습니다.
Jeremy Ruten의 다음 답변도 고려해 주십시오.
그들이 AJAX를 통해 그것에 접속하고 있다는 것을 보장할 방법이 없습니다.직접 액세스와 AJAX 액세스 모두 클라이언트에서 제공되므로 쉽게 위조할 수 있습니다.
그런데 왜 이렇게 하려고 합니까?
만약 PHP 코드가 매우 안전하지 않기 때문이라면, PHP 코드를 더 안전하게 만드십시오. (예를 들어, AJAX가 사용자 ID를 PHP 파일에 전달했다면, PHP 파일에 코드를 작성하여 올바른 사용자 ID인지 확인하십시오.)
위에 링크된 토론에서 더 현명한 생각.
보안 연결을 위해 어떤 방법이 필요합니다. 당신은 agax와 php를 사용할 수 있습니다.
if(@isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=="http://yourdomain/ajaxurl")
{
//Request identified as ajax request
}
cURL로 헤더를 스푸핑할 수 있기 때문에 php 파일을 보호하는 것을 잊지 마십시오.
다른 사용자가 사용자의 승인 없이 사용자의 콘텐츠에 액세스할 수 있다는 우려가 있는 경우 핫 링크를 차단할 수도 있습니다.
참조: http://www.htmlbasix.com/disablehotlinking.shtml
다른 도메인에서 실행 중인 JavaScript는 동일한 오리진 정책을 위반하므로 사용자 도메인의 페이지에 액세스할 수 없습니다.공격자는 이 문제를 해결하려면 XSS 취약성을 이용해야 합니다.간단히 말해서 모든 웹 응용 프로그램에 영향을 미치는 동일한 오래된 공격인 이 특정 공격에 대해 걱정할 필요가 없습니다.
그것은 간단하지 않고 아마도 그것을 할 방법이 전혀 없습니다.당신은 당신의 php 파일에 몇 가지 POST 변수를 요구하고 그것들을 당신의 AJAX 요청으로 보낼 수 있습니다.이렇게 하면 단순히 브라우저에 URL을 붙여넣는 사람으로부터 사용자를 보호할 수 있습니다.
아무도 다른 도메인(보안 문제)에서 사이트를 AJAX할 수 없지만 항상 연결하여 cURL 등으로 http 요청을 전송할 수 있습니다.
쿠키에서 일부 토큰을 만들 수 있으며, 이는 jquery 요청에서도 볼 수 있지만 해당 솔루션도 해킹될 수 있습니다.
언급URL : https://stackoverflow.com/questions/3362207/php-and-ajax-security-question
'source' 카테고리의 다른 글
디스플레이의 반대가 있습니까: 없음? (0) | 2023.08.07 |
---|---|
전체 경로가 없는 Python Glob - 파일 이름만 있음 (0) | 2023.08.07 |
PDB 명령과 이름이 충돌하는 변수를 조작하려면 어떻게 해야 합니까? (0) | 2023.08.07 |
Angular2 라우터(@angular/router), 기본 경로를 설정하는 방법은 무엇입니까? (0) | 2023.08.02 |
패키지의 라이센스 필드에 무엇을 넣어야 합니까?만약 내 코드가 내가 일하는 회사에서만 사용된다면 json? (0) | 2023.08.02 |