publico lector de archivos con maquina de estados.

Iniciado por bomba1990, 2 Abril 2010, 06:34 AM

0 Miembros y 1 Visitante están viendo este tema.

bomba1990

hola, hace poco tiempo me puse aprender sobre php, me parecio un lenguaje finisimo y muy potente.(comparado con vb ;) que es el que siempre e usado), y como hice un codigo para leer un archivo de texto y poder editarlo, (lo hice porque me daba ladilla tener que estar descargando en cualquier maquina qu eme conecte filezilla(el cliente ftp que uso) y despue slos archivos y bla bla bla. como e aprendido mucho de esta comunidad ahora publico esto para ver si a agluien mas le sirve, y para que me den sus comentarios a ver si esta mal echo o x cosa, de todas formas quiero agregarle algunas cosas al codigo y despues lo ire publicando mientras lo mejore.

Código (php) [Seleccionar]

<?php
echo"<center>\n<br><br>";
if (isset (
$_POST["estado"])){
$estado=$_POST["estado"];
if (isset($_POST["ar"])){
$archivo=$_POST["ar"];;
}
else{
header('location:'.$_SERVER['REQUEST_URI']);
}
switch(
$estado){
case 1:
echo form1();
break;
case 2:
echo '<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
<textarea name="text" cols="50" rows="25">'
;
echo abrir($archivo);
echo '</textarea><br>
<input type="submit" value="guardar">
<input type="hidden" name="estado" value="3">
<input type="hidden" name="ar" value='
.$archivo.'></form>';
break;
case 3:
guardar($_POST["text"],$archivo);
echo '<a href="'.$_SERVER['REQUEST_URI'].'">guardado</a>';
break;
}
}
else{
echo 
form1();
}
echo 
'</center>';
function 
form1(){
$form='<form method=post action="'.$_SERVER['REQUEST_URI'].'">
<input type="text" name="ar" size="50">
<input type="hidden" name="estado" value=2><br><br>
<input type="submit" value="seleccionar"></form>'
;
return $form;
}
function 
abrir($destino,$num=1){
if ((
preg_match('@^http://@',$destino)) or ( !$num ==1) ){
return file_get_contents($destino);
}
else{
if (file_exists($destino)){
$abrir fopen($destino,"r");
return trim(fread($abrir,filesize($destino)));
@fclose($abrir);
}
}
}
function 
guardar($texto,$destino){
$abrir fopen($destino,"w");
@fputs($abrir,$texto);
@fclose($abrir);
}
?>

"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Shell Root

Observaciones:




1.Linea 6, tienes doble punto y coma.
2.Mal filtro de la variable "ar", provocando un XSS.

Corección de errores:
Código (php) [Seleccionar]
<?php /* Corección de errores By: Shell Root */
echo"<center>\n<br><br>";

if (isset ($_POST["estado"])){
$estado $_POST["estado"];
if (isset($_POST["ar"])){
$archivo $_POST["ar"];
}
}else{
header('location:'.$_SERVER['REQUEST_URI']);
}//End Else

switch($estado){
case 1:
echo form1();
break;
case 2:
echo '<form method="post" action="'.$_SERVER['REQUEST_URI'].'">
   <textarea name="text" cols="50" rows="25">'
.abrir($archivo).'</textarea>
<br>
<input type="submit" value="guardar">
<input type="hidden" name="estado" value="3">
<input type="hidden" name="ar" value='
.htmlspecialchars($archivo,ENT_QUOTES). /*Para evitar el XSS*/ '>
     </form>'
;
break;
case 3:
guardar($_POST["text"],$archivo);
echo '<a href="'.$_SERVER['REQUEST_URI'].'">Guardado</a>';
break;
}//End Switch
}else{
echo form1();
}//End Else

echo '</center>';

function form1(){
$form='<form method=post action="'.$_SERVER['REQUEST_URI'].'">
<input type="text" name="ar" size="50">
<input type="hidden" name="estado" value=2><br><br>
<input type="submit" value="seleccionar"></form>'
;
return $form;
}//End Fuction form1

function abrir($destino,$num=1){
if ((preg_match('@^http://@'$destino)) or (!$num ==1) ){
return file_get_contents($destino);
}else{
if (file_exists($destino)){
$abrir fopen($destino,"r");
return trim(fread($abrir,filesize($destino)));
@fclose($abrir);
}//End If
}//End Else
}//End Fuction abrir

function guardar($texto,$destino){
$abrir fopen($destino,"w");
@fputs($abrir,$texto);
@fclose($abrir);
}//End Function guardar
?>


Podeis generar una Expresión Regular algo así. Para verificar si el archivo tiene extensión.
/(\.(\w){1,3})||(\.(\w){1,4})/
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

~ Yoya ~

Esta es la mi expresion regular...
Código (php) [Seleccionar]
(\w+)$
Captura desde atras los caracters alfa-numericos y como el "punto"  no es alfa-numerico, la captura se detiene.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

bomba1990

gracias si, es que estoy haciendo uno mas complejo, y decidi poner lo que llevaba a ver que opinaban.

bueno de seguridad hay si estoy raspado, me voy a sentar a leer sobre el tema porque tambien hice un formulario de login, para que ese tipo de funciones solo esten disponibles para mi, y no se nada de sql injection y no se si alguien se puede aprovechar algun fallo.

bueno lo de comprobar la extension del archivo, lo pense pero no estuve muy interesdo en ponerselo porque hay mucha variedad de archivos de texto que tienen diferentes extensiones o no tienen ninguna extension y no dejan de ser archivos de texto.

lo que si es que aveces hay codigo que como el de http://www.google.com que se ejecuta en ves de solo ponerlo y no se como acomodar eso, y lo otro es que quiere hacer como cuando uno pone un codigo aqui que tiene colores.

Bueno lo voy a ir acomodando y despues posteeo lo que haga.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Shell Root

Cita de: bomba1990 en  2 Abril 2010, 19:50 PMlo que si es que aveces hay codigo que como el de http://www.google.com que se ejecuta en ves de solo ponerlo y no se como acomodar eso,...
What The Fuck!


Cita de: bomba1990 en  2 Abril 2010, 19:50 PM...lo otro es que quiere hacer como cuando uno pone un codigo aqui que tiene colores.
Sistema GeSHi!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

bomba1990

Cita de: Alex@ShellRoot en  2 Abril 2010, 19:52 PM
Cita de: bomba1990 en  2 Abril 2010, 19:50 PMlo que si es que aveces hay codigo que como el de http://www.google.com que se ejecuta en ves de solo ponerlo y no se como acomodar eso,...
What The Fuck!

bueno es que yo queria despues d eeso hacer un bot, o algo por el estilo para sacar correos y dirrecciones http entonces se me ocurrio usar esto para abrir dirrecciones url, tipo google.com y hay fue cuando agregue file_get_contents($destino), pero con goolge me pone el codigo y ademas como que si lo ejecutara aqui te dejo una imagen y si quieres prueba  y veras pones en el espacio de texto http://www.google.com  y deberia salirte algo por el estilo





Cita de: bomba1990 en  2 Abril 2010, 19:50 PM...lo otro es que quiere hacer como cuando uno pone un codigo aqui que tiene colores.
Sistema GeSHi!

"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve