wenas gente del foro, tengo una duda a la hora de pasar datos mediante post de un formulario normal y corriente no funciona:
prueba.php
<html>
<head>
</head>
<body>
<form action="prueba2.php" method="post">
<input type="text" name="texto" size="150"><br>
<input type="submit" value="enviar">
</form>
</body>
</html>
quiero pasarle el siguiente codigo x el campo:
<html><head><script language="javascript">alert("asd");</script></head><body><a onclick=javascript:alert("asdf");>click</a></body></html>
para que me muestre los resultados en
prueba2.php
<?php
$texto=$_POST["texto"];
echo $texto;
?>
me sale el codigo tal cual pero no se ejecuta
Es porque no tienes correctamente instalado php o simplemente no lo tienes.
Como lo instalaste? que servidor WEB estas utilizando?
PHP Version 5.3.3-7+squeeze15
lo instale haciendo un aptitude install php5 y aptitude install php5-mysql , tengo apache y si que deberia funcionar bien el php no¿?
Citar<script language="javascript">alert("asd");</script><a onclick=javascript:alert("asdf");>click</a>
O todo en el mismo archivo
<html>
<head>
</head>
<body>
<form action="prueba2.php" method="post">
<input type="text" name="texto" size="150"><br>
<input type="submit" value="enviar">
</form>
<?php
$texto=$_POST["texto"];
echo $texto;
?>
</body>
</html>
Citarme sale el codigo tal cual pero no se ejecuta
pero si ve todo el código de php en plano es porque no le anda php.
Tienes php, tienes apache, pero apache no sabe que existe php y php no sabe que existe apache, debes agregar el handler manualmente para que apache interprete php o si no instalar la librería de php:
sudo apt-get install libapache2-mod-php5
sudo /etc/init.d/apache2 restart
Apache y php no vienen ni funcionan juntos por defecto, hay que configurarlos, pero esa librería te lo hace solo.
Cuidado con los XSS, usa htmlentities como corresponde:
http://php.net/htmlspecialchars
Saludos.
esta bien configurado, lo que pasa es que solo muestra "click" y el codigo no se ejecuta x lo menos con chrome, en los demas navegadores se muestra bien los alerts, que esta pasando, no entiendo nada, alguien me lo puede explicar,porque no funciona con el maldito chrome¿? gracias
En chrome no se va a ejecutar... cuestiones de seguridad implementados en el navegador... asi son los de Google.. donde se puedan meter se meten.
Edit: Parece que a Safari también le afecta.. sera cosa de WebKit ¬¬
Saludos
y que solucion le ves, es para un editor de texto que estoy haciendo, si utilizo en php el include no pasaria nada verdad, aunque es una solucion muy chapuza, la cuestion era cojer y pasar toda la pagina x el post para que se viese, como una vista previa...que harias tu¿?gracias
Un editor de texto con funciones js ? quieres hacer un editor de codigo online ? por que no le veo sentido incluir js...
un editor de texto para que la gente pueda modificar su pagina web con jquery, llendonos del tema se puede modificar el webkit o utilizando ajax o algo x el estilo,es que he estado googleando
Le diste un vistazo al inspeccionador o a la consola de errores?:
<a onclick=javascript:alert("asdf");>click</a>
Según la W3C (la que dicta el estandard html) dice que las propiedades de una etiqueta se encierran en comillas simples o dobles a menos que sea un string sin espacios en blanco o carácteres especiales que rompan el string como por ejemplo las comillas o null bytes.
El problema es que despues del onclick hay comillas dobles, entonces para el explorador la propiedad queda corrupta:
Citaronclick=javascript:alert("asdf");>
Lo que está de color naranjo sobraría en la propiedad. Es un error de sintaxis.
Prueba con esto:
<a href="javascript:;" onclick="javascript:alert('asdf');">click</a>
Recuerda tambien que una etiqueta <a> por estandard debe llevar siempre la propiedad href o si no no será obligación que el explorador lo considere enlace y de ahi algunos problemas de que en algunos funciona y en otros exploradores no. Fijate que tampoco puse anclas para que no mueva la pantalla al momento de hacer click al enlace si es que estubiera bien abajo.
Intentalo y nos cuentas.
Te recomiendo que para desarrollar utilices el inspeccionador de elementos y te apoyes mucho de la consola de errores ya que ese te va diciendo que está bien y que está mal, dale un vistazo al código fuente desde el explorador y te va a marcar con rojo las etiquetas mal formadas.
Te recomiendo tambien utilizar firefox porque es mas flexible y facil de auditar código y encontrar problemas.
Saludos.
Los navegadores basados en webkit simplemente no hacen caso WHK..
Saludos
WHK no me funciona en el chrome, debe ser algo del web webkit, lo que esta diciento drvy | BSM xk es el unico navegador que hemos probado y no funciona aparte de safari que dicen que tambien, los demas funcionan a la perfeccion, que se podria hacer ya que nose tanto komo vosotros¿? modificando el DOM, utilizando jquery o algo que se os ocurra es que es un problema muy grande y no poder pasar datos y que se ejecuten¿? gracias
Y que tal gardarlo en un txt o en la db y luego imprimirlo, quizás chrome lo filtra por que sabe que son parametro pasados por post o get filtrando el codigo js.
aaahhhh acabo de entender xD lo que quieres no es ejecutar el código html sino enviarlo via post :P
Pues chrome y safari entre otros que utilizan webkit te filtran las peticiones get y post para prevenir xss, es un filtro anti xss, de hecho en ie8 y 9 debería funcionar tambien pero si no te corta el código es porque el filtro es malo xD
En firefox debiera funcionar bien porque no impone a nadie a utilizar filtros que nadie quiere.
Para deshabilitar este filtro desde tu sitio web debes agregar esta cabecera:
X-XSS-Protection: 0
Así:
<?php header('X-XSS-Protection: 0'); ?>
Recuerda que un header se envía antes de cualquier cosa asi que debes ponerlo en la primera linea de tu código que recibirá el código.
Si lo pones en 1 se habilita, si no lo tienes se habilita, si vas a cenar se habilita, si le dices explicitamente que no lo quieres entonces ahi se deshabilita.
Espero que te sirva, un saludo.
WHK, eso es genial! funciona en chrome? y para que agregan un filtro si luego puedo deshabilitarlo?
Porque lo tienes que implementar en el sitio web :P y la mayoria (como nosotros) desconocemos que se puede desactivar y tampoco nos hace falta desactivarlo.
Saludos
si que funciona con el header whk ;D , gracias a todos x colaborar, ahora estoy pensando y si kisiera protegerlo contra sql injection una web entera que pasa x post que codigo utilizariais¿? se podria hacer x lista blanca¿? y komo lo hariais¿?
debes documentarte un poco mas sobre seguridad en php:
http://php.net/manual/es/security.php
Dale un vistazo a este enlace:
https://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html
Para prevenir el xss debes utilizar la función htmlspecialchars() y nunca olvides poner el ENT_QUOTES.
Para prevenir la inyección SQL siempre debes usar mysql_real_escape_string()
Pero cada función tiene su forma de utilizar, no es llegar y ponerlo donde sea, dale una vuelta al tema y lee la documentación de cada una de esas funciones.
El tema de la seguridad web es demasiado amplio, es imposible saber todo, pero si puedes tomar las medidas basicas para prevenir estas cosas.
EFEX, si funciona en chrome pero no siempre te va a proteger, es como el antivirus, proteje cosas basicas pero siempre hay formas de saltar ese filtro, pon en google "chrome anti xss" y verás la cantidad de veces que se ha logrado encontrar una evación, al final google dió un comunicado diciendo que el filtro proteje solo en ciertos escenarios.
Saludos.
no funciona el mysqli_real_escape_string, prueba esto:
prueba2.php
<?php
header('X-XSS-Protection: 0');
$texto=$_POST["texto"];
include("../../conexionbd.php");
$conexion=mysqli_connect($host,$usu,$pusu) or die ("Error mysqli_connect: ". mysqli_connect_error());
mysqli_set_charset($conexion,'utf8');
mysqli_select_db($conexion,$bd) or die ("Error mysqli_select_db.");
$texto=mysqli_real_escape_string($conexion, $texto);
echo $texto;
?>
prueba.php
<html>
<head>
</head>
<body>
<form action="prueba2.php" method="post">
<input type="text" name="texto" size="150"><br>
<input type="submit" value="enviar">
</form>
</body>
</html>
e introduce esto:
<html><head><script language="javascript">alert('asd');</script></head><body><a onclick=javascript:alert('asdf');>click</a></body></html>
si te fijas bien las comillas dobles y simples las hecha como sql injection, como podria hacer para quitar esas barras¿? y en cuanto afectaria a mi aplicacion en seguridad¿?
Edito: tambien afecta a la \
Edito: stripslashes seria una forma de hacerlo pero es seguro¿?
Vamos, esa función es para prevenir la inyección sql no un xss, la seguridad está en esos backslashses, si se los sacas pierde la seguridad, son utilizados como secuencia de escape y no se guardan... esa función no funciona con un echo, funciona con mysqli_query().
perfecto WHK ya voy comprendiendo contigo la dinamica de los ataques, ahora me falta lo mas importante como podria hacer una lista blanca o protegerme contra Remote code/command execution y rfi, yo pienso que con una lista blanca se protegeria uno no¿? la cuestion es mandar x el post una web en html y javascript pero k no altere nada con php es decir, Remote code/command execution y rfi...
Edito: estoy probando y no se puede ejecutar codigo Remote code/command execution y rfi haciendo un echo x un post:
<?php
header('X-XSS-Protection: 0');
$texto=$_POST["texto"];
echo $texto;
?>
que tipo de vulnerabilidad veis, sin contar xss¿? que pasaria con las etiquetas <iframe>¿?
es imposible proteger una web con listas blancas y negras, siempre habrá un agujero de seguridad, ni si quiera google ha podido crear ese famoso filtro infalibre contra ataques informáticos, phpids que es un proyecto colosal de listas negras tiene que estar sujero todos los dias a actualizaciones porque nunca se dejan de encontrar agujeros de seguridad que invaliden su protección.
La unica manera de estar bien protegido es utilizando las funciones adecuadas en su preciso momento, nada mas que eso, si te vas por las listas blancas y negras entonces estas totalmente perdido.
La seguridad informática a nivel web no se previene con un par de lineas, es un tema demasiado extenso.
Dale un vistazo a este enlace:
https://www.owasp.org/index.php/Category:Vulnerability
y lo de phpids lo ves bien para ponerlo en las webs, dime tu que dirias o que utilizas¿? gracias
Edito: estoy mirando phpids como instalarlo, me lo he descargado.
mira, que phpids no asegurará que funcione tu web de forma 100% segura, es solo para prevenir ataques de paginas medianamente seguras, si no eres capaz de hacer ese "medianamente" entonces no te va a servir mucho.
Yo no uso ningún software especial ni ninguna regla especial y he hecho hartas webs y todas seguras, es solo cosa de acostumbrarse a programar bien, eso es todo, si no lo puedes hacer entonces olvidate del tema de la seguridad.
Ten paciencia, nada se logra de un dia para otro, date tu tiempo y practica.
tienes razon whk, hay que ir despacio y lo voy hacer para practicar para que sea 100% segura, pero me podrias decir mas o menos como funciona phpids?, es que esta en ingles y no lo entiendo mucho y para que serviria phpids para detener a un hacker o para ver solo las vulnerabilidades que tienes? explicame un poco que no estoy a tu altura, muchas gracias
Mira, phpids lo bajas y se integra con php, no es lllegar y hacerle un include y listo, hay que configurarlo y pasarle funciones en el código, si no sabes mucho de programación entonces te va a costar un mundo.
Te recomiendo que para comenzar no utilices estos sistemas, te mal acostumbran a programar mal porque le dejas la seguridad en manos de phpids y eso no es bueno, phpids se utiliza en un sistema bien programado y bien seguro para que phpids detenga algunas fallas de seguridad no previstas, pero en ningún caso pretende hacerte todo el trabajo, phpids es vulnerable, siempre lo ha sido y siempre lo será, lo unico que hace es ayudar con la seguridad, no protegerlo al 100%.
Si quieres hacer cosas seguras entonces guiate por los estandares, haz una buena programación y listo, no necesitas ser un hacker para hacer un buén sistema web, solo debes utilizar las funciones adecuadas creadas para cada ocación, si php te dice que debes utilizar htmlspecialchars para mostrar una variable entonces eso debes hacer, si no haces lo que te recomienda el creador del lenguaje entonces estarás a la deriva.
mysql también tiene reglas de seguridad, php, python, perl, etc, todos lo tienen, la unica excepción es .net que trae sus propios filtros no estandarizados y son muy malos pero que mas se iba a esperar de microsoft.
Documentate, anda de a poco, vuelve a aprender php, apoyate mucho de php.net, no todos los blogs o foros tienen la razón.
Saludos.