검색 결과 :

×

WordPress용 REST API 보안 강화 가이드 (기본 인증 사용)

WordPress REST API용 기본 인증은 사용자 이름과 비밀번호 또는 클라이언트 자격 증명으로 생성된 토큰을 사용하여 API 요청을 검증함으로써 WordPress 엔드포인트에 대한 접근을 보호합니다. 이 인증 방식은 웹 서비스와 상호 작용할 때 사용자의 신원을 확인하여 권한이 있는 사용자만 WordPress REST API에 접근할 수 있도록 보장합니다.



WordPress의 Basic Auth 플러그인은 기본 인증을 사용하여 REST API를 보호하는 데 도움을 줍니다. 이 방식을 사용하면 모든 API 요청이 자격 증명(사용자 이름 또는 이메일과 비밀번호)을 base64로 인코딩하여 전송하므로 WordPress 사이트와 외부 애플리케이션 간의 안전한 통신이 보장됩니다.


워드프레스용 REST API 인증 플러그인

Image

WordPress용 REST API 인증 플러그인은 WordPress REST API에 대한 무단 접근을 차단하여 보안을 강화합니다. 본 플러그인은 기본 인증, API 키 인증, OAuth 2.0 인증, JWT 인증 등 다양한 인증 방식을 제공합니다.

현장 사진   


WP API 기본 인증을 설정하려면 WordPress용 REST API 인증 플러그인을 설치해야 합니다 . 이 플러그인을 사용하면 WordPress용 REST API에서 안전한 접근을 위해 기본 인증 자격 증명을 허용할 수 있습니다.


단계별 가이드 :


  • 1단계: 플러그인 설치 - 워드프레스 플러그인 저장소에서 "REST API Authentication for WP"를 검색하여 설치하세요. 이 플러그인을 설치하면 사이트에서 REST API 기본 인증이 활성화됩니다.
  • 2단계: 플러그인 활성화 - 설치가 완료되면 WordPress 대시보드에서 플러그인 → 설치된 플러그인으로 이동하여 REST API 인증 플러그인 옆의 "활성화"를 클릭하여 플러그인을 활성화하십시오.
  • 3단계: 인증 구성 - 플러그인 설정을 열고 단계에 따라 REST API에 대한 기본 인증을 구성하세요. 플러그인 구성 페이지로 이동하여 인증 방법을 설정하십시오.


1. 워드프레스 REST API와의 안전한 상호 작용을 위한 사용자 이름과 비밀번호 사용


사용자가 직접 피드나 블로그를 게시할 수 있는 Android 또는 iOS 앱을 개발하는 경우 WordPress용 REST API와의 안전하고 인증된 상호 작용을 보장하는 것이 매우 중요합니다.

사용자 인증을 안전하게 관리하는 방법:

  • WordPress에 기본 인증을 사용하세요: WordPress용 기본 인증 REST API를 사용자 이름과 비밀번호를 사용하여 구현하세요. 이 방법을 사용하면 앱을 통해 이루어지는 요청이 안전하게 인증됩니다.
  • 사용자 요청 인증: 사용자가 앱에 로그인하면 세션이 생성되고 사용자의 자격 증명이 암호화된 형식으로 기본 인증 헤더에 포함되어 전송됩니다.
  • 권한 관리: REST API는 사용자의 WordPress 권한에 따라 사용자가 수행할 수 있는 작업과 접근할 수 있는 콘텐츠를 결정합니다. 이를 통해 사용자 기능을 제어하고 WordPress 사이트와의 안전한 상호 작용을 유지할 수 있습니다.

WordPress에서 사용자 자격 증명을 사용한 기본 인증을 사용하면 각 사용자의 작업이 올바르게 인증되고 권한이 부여되어 사용자 생성 콘텐츠를 위한 안전한 환경을 제공할 수 있습니다.


사용자 자격 증명을 사용한 WordPress용 REST API 기본 인증 방식

2. 클라이언트 자격 증명을 사용하여 WordPress REST API와 안전하게 상호 작용하기


안드로이드 또는 iOS 앱을 개발 중이고 REST API를 통해 워드프레스 콘텐츠와 상호 작용해야 하는 경우, 무단 접근으로부터 사이트를 보호하는 것이 필수적입니다. 위험할 수 있는 워드프레스 사용자 자격 증명을 직접 사용하는 대신, 클라이언트 자격 증명을 사용한 워드프레스 기본 인증 방식을 사용하는 것이 좋습니다.

클라이언트 자격 증명을 안전하게 사용하는 방법은 다음과 같습니다.

  • 클라이언트 ID와 클라이언트 비밀번호를 얻으세요: WordPress 사용자 자격 증명을 노출하는 대신 앱에 대한 클라이언트 ID와 클라이언트 비밀번호를 생성하세요.
  • 보안 요청 보내기: API 요청을 할 때 클라이언트 ID와 클라이언트 시크릿을 포함합니다. 이러한 자격 증명은 Basic Authorization 헤더 내에서 암호화된 형식으로 전송됩니다.
  • 검증 및 액세스: WordPress용 REST API는 요청을 받으면 클라이언트 자격 증명을 검증합니다. 검증에 성공하면 사이트 보안을 유지하면서 필요한 API 엔드포인트에 접근할 수 있습니다.

클라이언트 자격 증명을 사용하면 WordPress 사용자 정보를 보호하는 동시에 앱이 WordPress 사이트와 효율적으로 상호 작용할 수 있습니다.


클라이언트 자격 증명을 사용한 WordPress용 REST API 기본 인증 방식

REST API를 사용한 기본 인증 사용: 사용자 이름 및 비밀번호


  • 플러그인에서 방법 구성 탭을 탭하세요.
  • 를 클릭하십시오 기본 인증 API 인증 방법으로.
  • WordPress용 REST API 기본 인증 방식 (사용자 이름 및 비밀번호 사용)
  • 선택 Base64 인코딩을 사용한 사용자 이름 및 비밀번호 클릭 다음 오른쪽 상단에 있습니다.
  • WordPress용 REST API 기본 인증 방식 (사용자 이름 및 비밀번호 사용)
  • 기능을 테스트하려면 기존 사용자의 사용자 이름과 비밀번호 필드를 입력하세요.
  • WordPress용 REST API 기본 인증 방식 (사용자 이름 및 비밀번호 사용)
  • REST API 엔드포인트를 편집하여 해당 엔드포인트에서 세부 정보를 가져올 수 있습니다. 예: /pages 엔드포인트가 여기에서 선택되었습니다.
  • 온 클릭 테스트 구성 버튼을 누르고 화면에 표시된 결과를 확인하세요.
  • 클릭 마감재 버튼을 클릭합니다.
  • WordPress용 REST API 기본 인증 방식 (사용자 이름 및 비밀번호 사용)

클라이언트 ID 및 클라이언트 비밀번호를 사용한 REST API 기본 인증:


  • 플러그인에서 다음으로 이동하세요. API 인증 구성 탭을 클릭하십시오. 기본 인증 API 인증 방법으로.
  • 이제 클라이언트 ID: 클라이언트 비밀 기본 인증 키 유형으로 선택하고 사용자 자격 증명을 인코딩하려는 방법에 따라 사용 가능한 암호화 방법 중 하나를 선택합니다. HMAC는 이 중에서 가장 안전하고 권장되는 방법입니다.
  • 마지막으로를 클릭하십시오. 구성 저장 따라서 워드프레스용 기본 인증 REST API가 활성화됩니다.
  • 클라이언트 ID와 클라이언트 시크릿을 사용한 WordPress REST API 기본 인증 방법
  • REST API 기본 인증 구성을 저장한 후 WordPress용 REST API에 액세스하려면 해당 인증 키를 사용하여 REST API 요청을 보내야 합니다. 아래와 같은 요청 형식을 사용해야 합니다.
  •   Request:  GET https://<domain-name>/wp-json/wp/v2/posts
      Header: Authorization: Basic base64encoded <client-id:client-secret>
    Sample Request Format- Example => Client ID : pSYQsKqTndNVpNKcnoZd and Client Secret : SrYPTViHdCbvkWyTfWrSltavTMeJjaOHCye
    
      Sample curl Request Format-
      curl -H "Authorization:Basic base64encoded <clientid:clientsecret>"
      -X POST http://<wp_base_url>/wp-json/wp/v2/users
      -d"username=test&email=test@test.com&password=test&name=test" 
      
  • base64 인코딩을 위한 PHP base64_encode(string) 함수는 다음과 같이 사용할 수 있습니다:
  •         
       base64_encode(‘pSYQsKqTndNVpNKcnoZd:SrYPTViHdCbvkWyTfWrSltavTMeJjaOHCye’) will results into 
      ‘cFNZUXNLcV RuZE5WcE5LY25vWmQ6U3JZUFRWaUhkQ2J2a1d5VGZXclNsdGF2VE1lSmphT0hDeWU=’ as output.
    Sample request: GET https://<domain-name>/wp-json/wp/v2/posts  Header: Authorization :Basic eGw2UllOdFN6WmxKOlNMRWcwS1ZYdFVrbm5XbVV2cG9RVFNLZw==
  • 확인 오류 응답 기본 인증을 위해 클라이언트 ID와 클라이언트 비밀번호를 사용합니다.
  • 확인 개발자 문서 자세한 내용은.


 
  var client = new RestClient("http://<wp_base_url>/wp-json/wp/v2/posts ");
  client.Timeout = -1;
  var request = new RestRequest(Method.POST);
  request.AlwaysMultipartFormData = true;
  request.AddParameter("title", "Sample Post");
  request.AddParameter("status", "publish");
  IRestResponse response = client.Execute(request);
  Console.WriteLine(response.Content);
  
 
  OkHttpClient client  = new OkHttpClient().newBuilder().build();
  MediaType mediaType = MediaType.parse("text/plain");
  RequestBody body  = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("title","Sample Post")
  .addFormDataPart("status", "publish") 
  .build();
  Request request  = new Request.Builder()
  .url("http://<wp_base_url>/wp-json/wp/v2/posts ")
  .method("POST", body)
   .build();
  Response responseclient.newCall(request).execute();
  
 
  var form = new FormData();
  form.append("title","Sample Post");
  form.append("status", "publish"); 
  
  var settings  = {
  "url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
  "method": "POST",
  "timeout": 0,
  "processData": false,
  "mimeType": "multipart/form-data",
  "contentType": false,
  "data": form
  };
  
  $.ajax(settings).done(function (response)  {
  console.log(response);
  });
  
 
  <?php
   $curl = curl_init();
  curl_setopt_array($curl, array 
  (
  CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/wp/v2/posts%20',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('title' => 'Sample Post','status' => 'publish'),
  ));
  
  $response = curl_exec($curl);
  curl_close($curl);    
  echo $response;
  
 
  import http.client
  import mimetypes
  from codecs import encode
  
  conn   = http.client.HTTPSConnection("<wp_base_url>")
  dataList= []
  boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
  dataList.append(encode('--' + boundary))
  dataList.append(encode('Content-Disposition: form-data; name=title;')) 
  
  dataList.append(encode('Content-Type: {}'.format('text/plain')))    
  dataList.append(encode(''))    
  
  dataList.append(encode("Sample Post"))
  dataList.append(encode('--' + boundary))    
  dataList.append(encode('Content-Disposition: form-data; name=status;'))    
  
  dataList.append('Content-Type: {}'.format('text/plain')))
  dataList.append(encode(''))    
  
  dataList.append(encode("publish")) 
  dataList.append(encode('--'+boundary+'--'))    
  dataList.append(encode(''))    
  body  = b'\r\n'.join(dataList)    
  payload= body
  headers = {
  'Content-type': 'multipart/form-data; boundary={}'.format(boundary) 
  }
  conn.request("POST", "/wp-json/wp/v2/posts ", payload, headers)
  res= conn.getresponse()    
  data = res.read()    
  print (data.decode("utf-8"))   
  
 
  var client = new RestClient("http://<wp_base_url>/wp-json/wp/v2/posts ");
  client.Timeout = -1;
  var request = new RestRequest(Method.POST);
  request.AddHeader("Authorization", "Basic base64encoded < clientid:clientsecret > ");
  request.AlwaysMultipartFormData = true;
  request.AddParameter("username", "test");
  request.AddParameter("email", "test@test.com");
  request.AddParameter("password", "test");
  request.AddParameter("name", "test");
  IRestResponse response = client.Execute(request);
  Console.WriteLine(response.Content);
  
 
  OkHttpClient client  = new OkHttpClient().newBuilder().build();
  MediaType mediaType = MediaType.parse("text/plain");
  RequestBody body  = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("username","test")
  .addFormDataPart("email","test@test.com")
  .addFormDataPart("password","test")
  .addFormDataPart("name","test") 
  .build();
  Request request  = new Request.Builder()
  .url("http://<wp_base_url>/wp-json/wp/v2/posts ")
  .method("POST", body)
  .addHeader ("Authorization", "Basic base64encoded < clientid:clientsecret > ")
   .build();
  Response responseclient.newCall(request).execute();
  
 
  var form = new FormData();
  form.append("username", "test");
  form.append("email", "test@test.com");
  form.append("password", "test");
  form.append("name", "test");
  
  var settings  = {
  "url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
  "method": "POST",
  "timeout": 0,
  "headers": {
  "Authorization": "Basic base64encoded < clientid:clientsecret > "
  },
  "processData": false,
  "mimeType": "multipart/form-data",
  "contentType": false,
  "data": form
  };
  
  $.ajax(settings).done(function (response)  {
  console.log(response);
  });
  
 
  <?php
   $curl = curl_init();
  curl_setopt_array($curl, array 
  ( 
  CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/wp/v2/users',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('username' => 'test','email' => 'test@test.com','password' => 'test','name' => 'test'),
  CURLOPT_HTTPHEADER => array(
  'Authorization: Basic base64encoded < clientid:clientsecret > '
  ),
  ))  
  $response = curl_exec($curl);
  curl_close($curl);    
  echo $response;
  
 
  import http.client
  import mimetypes
  from codecs import encode
  
  conn   = http.client.HTTPSConnection("<wp_base_url>")
  dataList= []
  boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
  dataList.append(encode('--' + boundary))
  dataList.append(encode('Content-Disposition: form-data; name=username;'))
  
  dataList.append(encode('Content-Type: {}'.format('text/plain')))    
  dataList.append(encode(''))    
  
  dataList.append(encode("test"))
  dataList.append(encode('--' + boundary))    
  dataList.append(encode('Content-Disposition: form-data; name=email;'))
  
  dataList.append('Content-Type: {}'.format('text/plain')))
  dataList.append(encode(''))    
  
  dataList.append(encode("test@test.com"))
  dataList.append(encode('--'+ boundary))    
  dataList.append(encode('Content-Disposition: form-data; name=password;'))
  
  dataList.append(encode('Content-Type: {}'.format('text/plain')))
  dataList.append(encode(''))
  
  dataList.append(encode("test"))
  dataList.append(encode('--' + boundary))
  
  dataList.append(encode('Content-Disposition: form-data; name=name;'))
  
  dataList.append(encode('Content-Type: {}'.format('text/plain')))
  dataList.append(encode(''))
  
  dataList.append(encode("test"))
  dataList.append(encode('--'+boundary+'--'))
  dataList.append(encode(''))
  body  = b'\r\n'.join(dataList)    
  payload= body
  headers = {
  'Authorization': 'Basic base64encoded < clientid:clientsecret > ',
  'Content-type': 'multipart/form-data; boundary={}'.format(boundary) 
  }
  conn.request("POST", "/wp-json/wp/v2/posts ", payload, headers)
  res= conn.getresponse()    
  data = res.read()    
  print (data.decode("utf-8"))   
  


    Postman을 사용하여 REST API 요청을 수행하려면 아래 단계를 따르세요.

  • 온 클릭 우편 배달부 샘플 플러그인의 탭.
  • WordPress Postman 구현을 위한 REST API 기본 인증 방식
  • 이제 기본 인증 Postman 샘플 카드 위로 마우스를 가져가세요.
      • WordPress Postman JSON 파일(사용자 이름:비밀번호)을 사용한 REST API 기본 인증 방식
      • 다운로드한 것을 가져옵니다. JSON 파일 아래와 같이 Postman 애플리케이션에 추가합니다.
      • WordPress Postman에서 JSON 파일을 가져오기 위한 REST API 기본 인증 방법
      • json 파일을 가져온 후 마지막 그림에 표시된 것처럼 컬렉션 아래의 REST API 요청을 클릭합니다. 귀하의 WordPress 도메인을 http://<wp_base_url>/wp-json/wp/v2/posts 교체 base64로 인코딩됨 헤더에 기본 인코딩된 값이 있습니다.
        • 예:
          사용자 이름: testuser 및 비밀번호: password@123의 경우 base64 인코딩된 값은 'dGVzdHVzZXI6cGFzc3dvcmRAMTIz'가 됩니다.

      REST API 인증 키 방식 Postman에서 기본 URL 바꾸기
      • WordPress용 REST API 기본 인증 방식(Postman JSON 파일 사용): 클라이언트 ID 및 클라이언트 시크릿
      • 다운로드한 것을 가져옵니다. JSON 파일 아래와 같이 Postman 애플리케이션에 추가합니다.
      • WordPress Postman에서 JSON 파일을 가져오기 위한 REST API 기본 인증 방법
      • json 파일을 가져온 후 마지막 그림에 표시된 것처럼 컬렉션 아래의 REST API 요청을 클릭합니다. 이제 귀하의 WordPress 도메인을 http://<wp_base_url>/wp-json/wp/v2/posts 교체 base64로 인코딩됨 헤더에 기본 인코딩된 값이 있습니다.
      • WordPress Postman에서 REST API 기본 인증 방식을 사용하여 기본 URL을 교체하는 방법


1. 역할 기반 REST API 제한 사항:


이 기능은 사용자 역할에 따라 WordPress REST API 접근을 제한합니다. 특정 REST API 리소스에 접근할 수 있는 역할을 허용 목록에 추가할 수 있습니다. REST API 요청이 발생하면 사용자의 역할을 확인하고, 허용 목록에 있는 역할에 한해서만 접근이 허용됩니다.


WordPress에서 역할 기반 REST API 제한을 구성하는 방법은 무엇입니까?

  • 플러그인으로 이동 고급 설정 탭.
  • . 역할 기반 제한 섹션에서는 모든 역할이 기본적으로 API에 액세스할 수 있습니다.
  • API에 대한 액세스를 제한하려는 역할 옆에 있는 확인란을 활성화합니다.
  • WordPress Postman 구현을 위한 REST API 기본 인증 방식
  • 위 이미지에서 구독자 역할 체크박스가 활성화되어 있습니다. 따라서 사용자가 구독자 역할을 가지고 API 요청을 할 때마다 해당 사용자는 요청된 리소스에 액세스할 수 없습니다.

참고: 역할 기반 제한 기능은 기본 인증(사용자 이름: 비밀번호), JWT 방식 및 OAuth 2.0(비밀번호 부여)에 적용됩니다.


2. 사용자 정의 헤더:


사용자 지정 헤더 기능을 사용하면 기본 'Authorization' 헤더 대신 사용자 지정 헤더를 사용할 수 있습니다. 이 기능은 보안을 강화하는 데 도움이 됩니다. REST API는 사용자가 정의한 사용자 지정 헤더 이름이 포함된 요청만 허용하기 때문입니다. 기본 'Authorization' 헤더를 사용하여 요청을 보내려고 하면 액세스가 거부됩니다.


WordPress에서 REST API 인증을 위한 사용자 지정 헤더를 구성하는 방법은 무엇인가요?

  • 플러그인으로 이동 고급 설정 탭.
  • . 맞춤 헤더 섹션에서 텍스트 상자에 원하는 헤더 이름을 입력하세요.
  • API 요청에 대한 새로운 사용자 정의 헤더를 적용하려면 변경 사항을 저장하세요.
  • WordPress Postman 구현을 위한 REST API 기본 인증 방식

3. REST API를 제외합니다.


'REST API 제외' 기능을 사용하면 특정 REST API 엔드포인트에 대해 인증 없이 접근할 수 있도록 허용할 수 있습니다. 제외된 API는 공개적으로 사용 가능해지므로 토큰이나 로그인이 필요하지 않습니다.


JWT 인증에서 제외된 REST API를 구성하는 방법은 무엇입니까?

  • 플러그인으로 이동 고급 설정 탭.
  • . REST API 제외 섹션에서 필요한 형식으로 API 엔드포인트를 입력하세요.
  • 입력된 API는 인증에서 제외되고 대중이 접근할 수 있게 됩니다.
  • WordPress Postman 구현을 위한 REST API 기본 인증 방식
  • 예: REST API '를 제외한다고 가정해 보겠습니다./wp-json/wp/v2/posts'를 입력하려면 텍스트 상자에 '/wp/v2/posts'를 입력해야 합니다.

4. HMAC를 사용하여 토큰에 대한 고급 암호화를 활성화합니다.


이 기능은 기본 인증 방식에서 사용할 수 있습니다. 기본적으로 토큰은 Base64 인코딩을 사용하여 암호화되지만, 고급 옵션을 사용하면 토큰에 HMAC 암호화를 활성화할 수 있습니다. HMAC는 훨씬 높은 수준의 보안을 제공하여 API 요청이 변조 및 무단 접근으로부터 강력하게 보호되도록 합니다.


워드프레스에서 기본 인증을 위해 토큰에 HMAC 암호화를 설정하는 방법은 무엇인가요?

  • 플러그인으로 이동 고급 설정 탭을 열고 토큰 암호화 방식 안내
  • 선택 HMAC Base64 대신 모든 토큰에 안전한 암호화를 적용하려면 변경 사항을 저장하세요.


기본 인증은 기본적으로 Base64 인코딩을 사용하는데, 이는 완전히 안전하지 않습니다. 하지만 저희 플러그인과 같은 도구를 사용하면 고급 HMAC 암호화를 활성화하여 토큰을 더욱 안전하게 만들고 실제 운영 환경에 적합하게 사용할 수 있습니다.

기본 인증은 테스트, 개발 또는 단순성이 중요한 소규모 애플리케이션에 적합합니다. JWT는 토큰 기반 세션과 확장성이 필요한 대규모 애플리케이션에 권장됩니다.

예. 기본 인증은 모바일 앱에서 사용자 자격 증명 또는 클라이언트 자격 증명을 사용하여 API 요청을 안전하게 검증하는 데 사용할 수 있습니다.

이 기능을 비활성화하면 REST API 엔드포인트에서 기본 인증을 통한 요청 유효성 검사가 더 이상 수행되지 않습니다. 이로 인해 API에 대한 무단 접근이 발생할 수 있으므로, 인증은 항상 활성화된 상태로 유지하는 것이 좋습니다.

역할 기반 제한 기능을 사용하면 WordPress 역할 중 어떤 역할에 REST API 엔드포인트에 대한 접근을 허용하거나 거부할 수 있는지 지정할 수 있습니다.



 당신의 응답을 주셔서 감사합니다. 곧 다시 연락드리겠습니다.

문제가 발생했습니다. 문의사항을 다시 제출해 주세요.

최대한 빠른 시일 내에 연락드리겠습니다!


도움이 필요하신가요?

귀하의 요구사항에 대한 신속한 안내(이메일/미팅)를 원하시면 apisupport@xecurify.com 으로 문의해 주십시오. 저희 팀이 귀하의 요구사항에 가장 적합한 솔루션/플랜을 선택하실 수 있도록 도와드리겠습니다.


ADFS_sso ×
안녕하세요!

도움이 필요하다? 우리는 바로 여기에 있습니다!

SUPPORT