문제

저는 PHP를 사용하여 여러 사이트에서 IFRAME으로 액세스할 수 있는 작은 웹 페이지를 만들고 있습니다.이 사이트에 대한 액세스를 "승인된" 사이트 내에서만 작동하도록 제한하고, 다른 사이트나 직접 액세스는 불가능하도록 제한하고 싶습니다.누구든지 어떤 제안이 있습니까?이것이 가능합니까?PHP 사이트는 Apache이고 콘텐츠를 프레임화하는 사이트는 아마도 .NET일 것입니다.

명확히 하자면, 승인된 사이트 내에 iframe이 설정되어 있는 한 모든 사이트에서 페이지를 볼 수 있습니다.사람들이 직접 접근하는 것을 차단하고 싶습니다.쿠키가 해결책이 될 수 있다고 생각하지만 확실하지 않습니다.

도움이 되었습니까?

해결책 7

모든 훌륭한 아이디어에 감사드립니다!제가 가려고 하는 해결책은 승인된 "iframing" 사이트에서 설정한 세션 쿠키라고 생각합니다.정말로 결정한 사람은 여전히 ​​콘텐츠를 얻을 수 있을 것이라고 생각하지만 양측의 일종의 공유 비밀을 기반으로 적절한 "비밀" 알고리즘을 고안하고 승인된 사이트에 내 PHP 사이트에서 읽을 세션 쿠키입니다.쿠키가 유효하고 내 기준을 충족하면 콘텐츠를 표시하고, 그렇지 않으면 표시하지 않습니다.내가 보호하고 있는 정보는 업무상 중요한 정보가 아니며, 단지 해당 정보가 남용되는 것을 방지하려고 노력하는 것뿐입니다.

다른 팁

불행히도 이것은 불가능할 것입니다.

JavaScript를 사용하면 페이지가 다른 프레임에 포함되어 있는지 확인할 수 있지만 일부 사람들의 브라우저에서는 JavaScript를 꺼질 수 있으므로 완벽하지는 않습니다.

예를 들어, 의도 인 경우 다음 JavaScript를 실행하여 페이지를 다시 보충 할 수 있습니다.

if (top.location != location) {
  top.location.href = document.location.href ;
}

이것저것 생각해보면...나는 이것이 완전히 안전하다고 확신하지 못하지만, 여기에 대해 더 생각해 보는 기회가 있습니다.

이를 수행할 수 있는 유일한 방법은 해당 내용이 포함될 사이트를 제어하는 ​​것입니다.이를 제어하면 암호화된 시간을 프레임세트에서 프레임으로 전달할 수 있습니다.

 <iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />

그런 다음 Frame.php는 메시지를 해독하여 작은 델타(예: 10초) 내의 시간을 찾습니다.Frame.php는 허용되는 사이트만 시간을 암호화할 수 있다는 것을 알고 있기 때문에 자체적으로 표시해도 괜찮다는 것을 알고 있습니다.그렇지 않으면 아무것도 출력하지 않습니다.

javascript든 HTTP_REFER든 그 밖의 모든 것은 스푸핑되거나, 꺼지거나, 우회될 수 있습니다.

실제로 해당 URL을 사용하면 사용자가 10초 이내에 프레임을 로드하기만 하면 공격자는 어디에서나 프레임을 표시할 수 있습니다.따라서 공격자는 승인된 사이트를 긁어내고 키를 가져가게 됩니다.해당 위협 모델이 귀하가 받아들일 수 없는 경우에는 실제로 할 수 있는 일이 없습니다(더 복잡한 프로토콜을 제외하고).

나는 이것을 구글이 애드센스를 구현하는 것과 같은 방식으로 구현할 것입니다.사이트에 iframe 코드를 삽입하는 대신 계좌 번호가 포함된 일부 자바스크립트를 삽입하도록 합니다.

<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>

최소한 이 방법을 사용하면 계정별로 iframe 콘텐츠를 표시하는 사람을 관리할 수 있습니다.누군가 귀하의 iframe을 무단으로 사용하려고 시도하는 경우 계정을 비활성화할 수 있습니다.또한 무단 액세스를 방지하기 위해 (브라우저의 보안 제한 내에서) 자바스크립트를 통해 문서의 속성을 검사할 수도 있습니다.

스크린 스크래핑은 여기에서 가능한 해결책 일 수 있습니다.

승인 된 사이트 웹 서버에서 오는 요청 만 수락하고 보안 토큰을 발행하려면 사이트에서 액세스 목록을 설정하십시오. 그것은 쉬운 부분입니다.

최종 Dev 팀은 컨텐츠를 가져 오려면 릴레이 서플렛을 설정 한 다음 (관련 URL을 다시 작성한 후) 컨텐츠를 사용자에게 표시해야합니다.

이것은 상당히 관여 할 수 있지만 사이트에 액세스하는 사람을 더 잘 통제 할 수 있습니다. 또한, 귀하가 발행 한 보안 토큰은 웹 사용자에게는 보이지 않습니다. 두 웹 서버 사이에서만 전송해야하므로 웹 사용자는 표시되지 않습니다.

비밀 SALT + 날짜를 사용하여 클라이언트 IP를 MD5 (또는 더 나은 보안을 위해 암호화) 할 수 있으며 iframe SRC URL에서 매개 변수로 전달할 수 있습니다. iframe에서 당신은 같은 일을하고 결과가 매개 변수와 동일한 지 확인합니다. 그렇지 않은 경우 액세스를 거부하십시오

당신은 확인할 수 없습니까? $_SERVER['HTTP_REFERER'] 특정 문자열이 포함되어 있는지 확인하려면?

if (strpos('http://example.com', $_SERVER['HTTP_REFERER']) !== false) {
    // allowed
}

귀하의 경우 먼저 주소를 구문 분석 한 다음 확인하고 싶을 수도 있습니다. in_array().

사람들이 추천자를 속일 수 있기 때문에 이것은 바보가 아닙니다. 하지만 어쩌면 2 개의 서버간에 다른 통신으로 1 개의 사용 키를 사용할 수 있습니다. 키가 사용 된 경우 이동하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top