램프 설정이 있으며 로그인 한 사용자 만 액세스 할 수 있도록 웹 페이지 (이미지, CSS, 비디오 등)의 내용을 보호 할 수 있기를 원합니다.PHP를 사용하여 로그인 한 사용자에게 콘텐츠 액세스 제한
.htaccess로이 작업을 쉽게 수행 할 수 있음을 알았습니다. 그러나 인증 팝업을 사용하고 싶지 않아 세션을 사용할 수 있고 로그 아웃 할 수 있기를 원합니다.
저는 PHP를 사용하여 mysql으로 인증하고 세션을 생성하는 작업을하고 있습니다. 이것은 잘 작동합니다. 그러나 심상, CSS, javascript etc.는 아직도 접근 가능하다.
유효한 PHP 세션이있는 경우에만 어떻게 콘텐츠에 액세스 할 수 있습니까?
mod_rewrite를 사용하여 파일을 php 파일 (예 : auth.php? file = ...)로 전달하고 거기에서 세션 검사를 수행했습니다. 이것은 이미 점검 된 페이지의 모든 단일 이미지에 대해 세션을 확인하는 것이 비효율적 인 것처럼 보입니다. 그것은 해킹처럼 보이고 이것을 수행하는 더 깨끗한 방법이 있다고 생각하고 있습니다.
mod_session_cookie와 같은 아파치 모듈은 세션 키가있는 쿠키가 내 세션 데이터베이스에 존재하는지 확인하고, 그렇다면 디렉토리에 대해 모두 허용을 설정합니까?
또는 mod_auth_mysql을 사용할 수도 있지만 세션을 사용하고 인증 팝업이 아닌 PHP 양식을 사용하여 로그인 할 수 있습니까?
편집 : (.htaccess로하지 않음) 내 아파치 설정 파일에서
내가 추가 :
RewriteLock /var/www/lib/rewrite.lock
<VirtualHost>
#...
RewriteEngine on
RewriteMap sessionValid prg:/var/www/lib/allow.php
<Directory /var/www/client/*>
RewriteEngine on
RewriteCond %{HTTP_COOKIE} !client-cookie=([^;]+)
RewriteRule .* - [L,R=403]
RewriteCond %{HTTP_COOKIE} client-cookie=([^;]+)
RewriteCond ${sessionValid:%1} !valid
RewriteRule .* - [L,R=403]
</Directory>
</VirtualHost>
그리고 스크립트 허용 여기
이 문제에 대한 나의 해결책이다 .php :
#!/usr/bin/php5
<?php
set_time_limit(0);
echo "";
$stdin = fopen("php://stdin","r");
$db = mysql_connect(...);
mysql_select_db(..., $db);
$querypre = "SELECT ID FROM Sessions WHERE ID='";
while (1) {
$line = trim(fgets($stdin));
$query = $querypre.mysql_real_escape_string($line)."'";
$result = mysql_query($query);
if (mysql_num_rows($result) > 0)
echo("valid\n");
else
echo("0\n");
}
mysql_close($db);
?>
이것은 매력처럼 작동합니다. 이것과 session_set_save_handler을 사용하면 mysql이 지원하는 PHP 세션을 사용하여 PHP 페이지와 모든 컨텐츠를 보호 할 수있었습니다. 누군가가 이것을 유용하게 찾길 바랍니다.
몇 가지주의 사항 : 해당 가상 호스트 내부에 사용하려는 경우
- 한다 RewriteMap 문 필요는 가상 호스트 블록 내부 정의합니다. 블록 외부에 배치하면 작동하지 않습니다.
- RewriteMap을 정의하기 전에 RewriteEngine을 설정해야합니다. 그렇지 않으면 무시됩니다.
- RewriteLock은 가상 호스트 블록에있을 수 없습니다.
- 셸 스크립트와 마찬가지로 php 파일은 apache 사용자가 실행할 수 있어야하며^M의 공백은
- 입니다. RewriteMap 문은 .htaccess에는 배치 할 수 없지만 맵을 사용하는 다른 명령문은 배치 할 수 있습니다.
Apache-fu에 올라 있지 않은 것에 대해 용서해주십시오. 쿠키 존재 여부를 확인하는 것 이상입니다. –
@Brock : N ope. –
그러면 우회 할 수 없을 정도로 믿을 수 없을까요? OP는 쿠키가 자신의 DB에서 적절한 세션에 대해 검증되기를 원합니다. –