컨텍스트를 기반으로 보안 URL 사용


9

컨텍스트를 기반으로 보안 URL을 생성하기 위해 다양한 방법을 사용하는 것에 익숙합니다.

$this->getUrl('my-page', array('_forced_secure' => $this->getRequest()->isSecure()));

보안 모드에있는 동안 보안 페이지로 연결되는 링크를 작성하거나 보안 모드를 사용하지 않는 경우 비보안 페이지에 연결하는 링크를 작성하는 데 유용합니다.

내가보고있는 문제는 Magento가 몇 가지 특수 페이지 만 보안이 필요한 것으로 취급한다는 것입니다 (고객 계정, 체크 아웃 등). 내가 선호하는 것은 사용자가 현재 보안 모드경우 Magento가 항상 보안 링크를 사용하거나 사용자가 비보안 모드 인 경우 비보안 링크를 사용하는 것입니다.

내가 알 수있는 것 중에서 유일한 유일한 옵션은 다음과 같습니다.

  1. $this->getUrl()위의 스 니펫과 유사하도록 모든 인스턴스를 수정 하십시오.
  2. base_urlHTTPS를 사용하도록 비보안 을 설정 하여 모든 페이지를 보호하십시오.

$this->getUrl()사용자 컨텍스트에 관계없이 모든 호출을 변경 하거나 모든 페이지를 HTTPS로 강제 하지 않아도되는 더 좋은 방법이 있습니까?

-- 편집하다 --

/app/code/core/Mage/Core/Model/Url.php->setRouteParams()더 깨끗한 방법이 있기를 희망하지만 메소드 를 수정할 수 있다는 것을 알고 있습니다 .

답변:


5

Magento가 항상 현재 사용중인 프로토콜과 일치 하면 사이트의 홈 페이지와 같이 보안되지 않은 URL에있을 때 고객 로그인 페이지에 보안 URL을 뱉지 않는 등의 문제가 발생할 수 있습니다.

내가 제안하는 것은 보안 구성이 필요한 추가 경로를 선언하기 위해 구성 XML을 사용자 정의 모듈의 구성 파일에 추가하는 것입니다. 이를 config.xml 파일에 저장하면됩니다 ( module_or_route_id고유 한 것으로 대체) .

<config>
    <frontend>
        <secure_url>
            <module_or_route_id>/route/</module_or_route_id>
        </secure_url>
    </frontend>
</config>

Mage_Customer 모듈의 config.xml을 살펴보면 "/ customer /"경로가 안전한 것으로 정의 된 예를 볼 수 있습니다.

참고 : module_or_route_id위 예제 의 일부가 고유하지 않은 경우 하나의 정의 만 사용되므로 무언가 제대로 보호되지 않습니다. 노드 이름이 고유한지 확인하십시오. :)

이 경로는 경로 기반이므로 개별 CMS 콘텐츠 페이지의 URL에 어떻게 적용되는지 확실하지 않습니다. 예를 들어 모두 동일한 CMS로 전송되는 다시 쓰기이므로 경로 / 경로를 모두 공유하기 때문입니다. 제어 장치.

HTTPS를 실행하기 위해 전체 사이트가 실제로 필요한 경우 보안 및 비보안 기본 URL 설정 모두에 https : // URL을 사용해야합니다.


가능한 모든 프런트 엔드 경로 (특히 카탈로그 검색 / ajax / suggest 등의 '보이지 않는'경로)에 대한 추가 보안 경로를 포함하기보다는 핵심 URL 모델 만 수정하는 것이 좋습니다. 그렇습니다. 핵심 변경 사항이지만 추가 3 줄의 코드이지만 모든 프런트 엔드 경로를 처리하는 데 많은 코드가 필요합니다. 변경하려는 경로가 두 개 뿐인 상황에서는 제안이 훨씬 더 합리적입니다.
pspahn

과거 Mage_Core_Model_Store::getBaseUrl에는 Facebook 탭에 포함 된 매장을 항상 안전하게 유지하도록 수정 했습니다. 블록 캐시 저장과 같은 다른 것들도 고려해야합니다. 캐시 키에 무언가를 추가해야합니다. David가 말한 것처럼, 로그인 / 체크 아웃에 대한 비보안 링크 또는 궁극적으로 사이트의 모든 고객이 로그인하거나 체크 아웃을 수행하면 보안 모드가됩니다.
Peter O'Callaghan

1
@pspahn /catalogsearch/경로를 안전한 것으로 설정하면 일치하는 것이 포함되어야한다고 생각 했습니까 /catalogsearch/*/*/? 즉, 모든 것을 catalogsearch안전하게 지키려면 단 하나의 규칙 만 있으면됩니다 .
davidalger

@Cags는 내 대답에 포함하지 않은 것을 지적했으며 캐시 키에 대한 참고 사항입니다.
davidalger

캐시 키에 대한 좋은 지적입니다. 가장 좋은 방법은 모든 HTTPS를 실행하는 것 같습니다.
pspahn

2

app/etc/config.xml파일 에서 다음을 설정 하십시오.

<?xml version="1.0"?>
<config>
  <frontend>
    <secure_url>
      <all>/</all>
    </secure_url>
  </frontend>
</config>

이것은 마 젠토 1.9.1에서 작동합니다

사용자가 https를 사용하는 경우 모든 URL을 강제로 https로 다시 작성해야합니다.


더 나은 : config.xml을 사용하지 말고 local.xml을 사용하십시오
Michael

1

다음은 시스템에 절제되어 있지만 중요한 옵션입니다. | 구성 | 웹 ~ "프런트 엔드에서 보안 URL 사용"이라고 말해야하는 경우-이 값을 예로 설정하면 https로로드 된 페이지가 https 링크를 사용합니다.

대부분의 경우 코드를 작성하거나 추가 구성을 제공 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.