Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Hekaly en 2 Julio 2014, 18:16 pm



Título: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 2 Julio 2014, 18:16 pm
Buenas.

Tengo una sección de una web que quiero mostrar solo si se accede desde otra web.

Os pongo un ejemplo.

mi web es www.dominio.com y quiero que si accedes desde www.dominio2.com a www.dominio.com/carpeta puedas verlo, pero que desde cualquier otra web no se pueda el caso es que he conseguido hacerlo pero no a nivel de esa ruta exacta sino de toda la web.


Código:
SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1

<FilesMatch "(.*)">
      Order Deny,Allow
      Deny from all
      Allow from env=url_ref
</FilesMatch>

Con esto consigo que solo la web dominio2.com acceda a www.dominio.com/carpeta, y el resto no, incluido la direccion raiz (www.dominio.com)

Lo que quiero es que solo pueda ser visitado dominio2 la carpeta que le digo y como la web que tengo es un wordpress no tengo una con ese nombre si no que es un RewriteRule.

Como podria hacer eso?? Tambien eh probado a porner la ruta en <FilesMatch "http://dominio.com


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 2 Julio 2014, 18:29 pm
¿Hay alguna razón por la cual quieras hacer esto? Te puedes saltar la condición si modificas la cabezera http para poner el referer correcto.


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 2 Julio 2014, 18:38 pm
Lo que me han pedido es que solo  desde x dominio pueda acceder a dominio.com/carpeta pero a dominio.com pueda acceder todo el mundo.

Como se que puedes bloquear o permitir por ip o referer he puesto lo que he publicado, pero claro, deniego o permito toda la web , ya que es wordpress no tengo dominio.com/carpeta como tal (asi que <Directory /var/log...) no puedo usarlo (o eso creo).

Aun asi, no puedo tocar el codigo de la web (cabeceras) por que eso es para el departamento de desarrollo y yo estoy en otro.

Por eso me he ido al htaccess. No se podria hacer con el?

Muchas gracias.


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 2 Julio 2014, 19:18 pm
A ver pues, ¿el .htaccess donde lo tienes?

¿En el root o en la carpeta que quieres proteger?

Si te entendi...

De Dominio1.com puede acceder Dominio2.com/carpeta
Nadie puede acceder a Dominio2.com/carpeta
Todos pueden acceder al root de Dominio1.com


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: el-brujo en 2 Julio 2014, 22:47 pm
Código:
SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1

<Directory "/home/httpdocs">
<FilesMatch "(.*)">
      Order Deny,Allow
      Deny from all
      Allow from env=url_ref
</FilesMatch>
</Directory>

Supongo que con la directiva  <Directory no te funciona porque estás usando reglas del mod_rewrite, pero con una expresión regular debería funcionar:

Código:
<FilesMatch "carpeta$">

Citar
FilesMatch matches physical filesystem objects.

entonces:

Código:
<LocationMatch "carpeta$">

También se podría hacer con el el mod_rewrite usando expresiones regulares:

Código:
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://www\.example\.com [NC]
RewriteRule \.png http://www.somewhere.com/something.gif [R]


Usando el RewriteCond junto con !-d (cuando sea directorio)


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 2 Julio 2014, 23:02 pm
MinusFour.

En realidad no existe la carpeta ya que dominio1.com/carpeta es generado con una regriteRule de htaccess de una ruta de wordpress. Por eso no me ha funcinoado (eso ycreo yo) <Directory> <Location><Proxy> etc

Si, el htaccess esta en la raiz del proyecto web (/var/www/carpeta)
Si, todo el mundo puede acceder a dominio1.com , pero si accedes (por ejemplo con un href) a dominio1.com/carpeta solo podra acceder el que ya quiera (dominio2.com).

el-brujo --> Mañana cuando llegue al pc, lo pruebo y os cuento.


Muchas gracias a los dos, un saludo.



Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 3 Julio 2014, 10:26 am
Nada, no me sale ni con vuestra ayuda, debe estar haciendo algo mal.

Una duda que seguramente me ayudara a resolverlo.

Como se aplica a una ruta url sin que exista realmente esa carpeta. Es decir, como se aplica domonio.com/micarpeta sin que exista /var/www/htdocs/dominio/micarpeta.

Gracias.


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 3 Julio 2014, 16:56 pm
Pues LocationMatch debería hacer justo eso:

Código
  1. SetEnvIfNoCase Referer "^http://dominio2.com" url_ref=1
  2.  
  3. <Directory "/home/httpdocs">
  4. <LocationMatch "carpeta$">
  5.      Order Deny,Allow
  6.      Deny from all
  7.      Allow from env=url_ref
  8. </LocationMatch>
  9. </Directory>
  10.  

La documentación de apache dice eso:

The <LocationMatch> directive limits the scope of the enclosed directives by URL.

Lo único que se me ocurre es que quizás no hace match con la expresión regular porque le agregas un trailing slash ("/" al final)


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 3 Julio 2014, 17:25 pm
Buenas y gracias por los comentarios.

Pero en toria si <Directory "/home/httpdocs"> significa que se me aplica a todo lo que cuelga de ahi, y claro carpeta$ no existe.

Aun asi, he estado dandole vueltas y con prueba y error he conseguido justo lo contrario a lo que quiero.

Código
  1. SetEnvIfNoCase Referer "^http://dominio2" spam_ref=1
  2. SetEnvIfNoCase Referer "^http://dominio3" spam_ref=1
  3. RewriteCond %{HTTP_REFERER} .*dominio.com/carpeta/.* [OR]
  4. Order Deny,Allow
  5. Deny from env=spam_ref
  6.  

BIen, con eso, consigo que todo el mundo acceda a dominio1.com/carpeta menos los dos que le digo y todo el mundo incluido dominio2 y 3 pueden acceder a raiz de dominio1.

Lo que quiero es al contrario, que en dominio1.com/carpeta solo peuda acceder por dominio2 y 3, pero si cambio el orden de alloy y deny lo que hago es aplicar toda la web, en vez de la ruta.

Ya me queda poco, xD, aun asi gracias de nuevo.

Nota. Creo que con el tema de capeta puede que sea culpa mia por explicarme mal. Como sabemos wordpress contiene 3 carpeta wp-admin, wp-content y wp-includes, por lo que dominio.com/carpeta seria en realidad dominio1.com/index.php?id=1$sección=coches (me estoy inventando la ruta). y no existiria la carpeta "coches"  como tal.



Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: JorgeEMX en 3 Julio 2014, 18:08 pm
Debería funcionar con un simple Allow from:

Código
  1. SetEnvIfNoCase Referer "^http://dominio2" spam_ref=1
  2. SetEnvIfNoCase Referer "^http://dominio3" spam_ref=1
  3. RewriteCond %{HTTP_REFERER} .*dominio.com/carpeta/.*
  4. Allow from env=spam_ref

No deberías usar el OR. El Order es útil para cuando haces múltiples declaraciones Allow y Deny. Mira la documentación de Apache: http://httpd.apache.org/docs/current/mod/mod_access_compat.html


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 3 Julio 2014, 18:15 pm
No creo que esten usando bien el RewriteCond, porque no hay ninguna RewriteRule para la condiciónal.

Código
  1. RewriteCond %{HTTP_REFERER} !.*dominio1.com.* [NC]
  2. RewriteRule ^/carpeta$ - [F]

Edit: Creo que así funciona mejor.


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 8 Julio 2014, 11:57 am
Buenas a todos.

Sigo liado con el tema del htaccess

Me gustaria ir por partes asi que si quiero prohibir que un domonio accesa a otro dominio. lo aria asi, no?

Código
  1. RewriteCond %{HTTP_HOST} ^dominio\.com$ [NC]
  2. RewriteCond %{REQUEST_URI} ^/categoria/ [NC]
  3. RewriteRule ^(.*)$   http://domino2.com/  [R=301,L]
  4.  

Tambien eh probado con la ultima linea..

Código
  1. RewriteRule ^(.*)$   http://dominio2.com/  [F]
  2.  


Pero no me funciona bien, si accedo con un href a dominio.com/categoria desde dominio2.com puedo acceder.


Muchas gracas.


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 8 Julio 2014, 15:16 pm
No exactamente...

Para empezar, lo que tu quieres hacer no es que un dominio solo pueda acceder a un recurso especifico en tu otro dominio, lo que tu quieres hacer es que solo puedas ver el recurso del segundo dominio si vienes del primer dominio lo cual es bastante diferente. Para lo cual tienes que usar el REFERER.

¿Has probado justo con el código que puse la vez pasada? Le hice un par de modificaciones... no te confundas si uso el nombre carpeta, no estoy redireccionando ninguna carpeta (a menos de que SI tengas esa carpeta)... puedes decirle endpoint o recurso si prefieres....

Si no te funciona, lo único que se me pudiera ocurrir es que no está agarrando la regla del mod_rewrite del wordpress. En mi opinión debería ser lo mismo que el REQUEST URI porque al final los dos estan trabajando con los url paths... pero si no es así...

Código
  1. RewriteCond %{HTTP_REFERER} !.*dominio1.com.* [NC]
  2. RewriteCond %{REQUEST_URI} ^/categoria/ [NC]
  3. RewriteRule ^(.*)$ - [F]
  4.  

Se traduce a: Si vienes de una URL con dominio1.com en cualquier parte de ella y estás accediendo a /categoria/, envia un forbidden. Ojo con el trailing slash, lo mas probable es que no haga match si vas a dominio2.com/categoria pero si dominio2.com/categoria/


Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: Hekaly en 8 Agosto 2014, 09:59 am
Hola muy buenas.

Reabro este hilo para preguntaros otra duda sobre redirreciones de referer.

Respecto a la anterior duda ya lo consegui.

Código
  1. RewriteCond %{HTTP_REFERER} !^http://xxxxxx\.com
  2. RewriteCond %{HTTP_REFERER} !^http://xx\.xxx\.es
  3. RewriteCond %{REQUEST_URI} ^/ugr/.*
  4. RewriteRule ^(.*)        http://www.example.com/%{HTTP_REFERER} [L,R]


El caso es que ahora me piden hacer eso mismo (acceder a un uri solo desde los referrer que yo quiero), pero que vengan desde un https.

He intentado probar muchas formas y no lo he conseguido.

Código
  1. RewriteCond %{HTTPS_REFERER} !^https://xxxxxx\.com
  2. RewriteCond %{HTTPS} !^https://xxxxxx\.com
  3. RewriteCond %{HTTP_REFERER} !^https://xxxxxx\.com
  4. RewriteCond %{HTTP_REFERER} !^http(s)?://xxxxxx\.com
  5. RewriteCond %{HOST_PORT} = 443

Entre otras formas y nada.

Creo que consegui que me funcionara solo por https pero el http no me iva.

Muchas gracias.



Título: Re: Permitir a una url accedes a mi web a traves de htaccess
Publicado por: MinusFour en 8 Agosto 2014, 16:19 pm
Hola muy buenas.

Reabro este hilo para preguntaros otra duda sobre redirreciones de referer.

Respecto a la anterior duda ya lo consegui.

Código
  1. RewriteCond %{HTTP_REFERER} !^http://xxxxxx\.com
  2. RewriteCond %{HTTP_REFERER} !^http://xx\.xxx\.es
  3. RewriteCond %{REQUEST_URI} ^/ugr/.*
  4. RewriteRule ^(.*)        http://www.example.com/%{HTTP_REFERER} [L,R]


El caso es que ahora me piden hacer eso mismo (acceder a un uri solo desde los referrer que yo quiero), pero que vengan desde un https.

He intentado probar muchas formas y no lo he conseguido.

Código
  1. RewriteCond %{HTTPS_REFERER} !^https://xxxxxx\.com
  2. RewriteCond %{HTTPS} !^https://xxxxxx\.com
  3. RewriteCond %{HTTP_REFERER} !^https://xxxxxx\.com
  4. RewriteCond %{HTTP_REFERER} !^http(s)?://xxxxxx\.com
  5. RewriteCond %{HOST_PORT} = 443

Entre otras formas y nada.

Creo que consegui que me funcionara solo por https pero el http no me iva.

Muchas gracias.



Eso es porque las reglas son mutuamente excluyentes (no puedes venir de un sitio HTTPS Y un sitio HTTP) necesitas ponerle un OR si quieres que se cumpla una o la otra.