EspañolEnglish

chuso.net

 
   
This site is being redeveloped and some features may not work properly
        Pages: 1 2 3 4 5 6 7 8 9 10Next

Anyone can make a web page

 Comment

The title of this post is ambiguous, since it can be interpreted as "making web pages is something easy for everyone" or as "even the most inept is allowed to make a web page".
This ambiguity is intentional, since experience has shown me that both interpretations are correct, in fact often the first implies the second.

'Cause although anyone can make a website, not everyone can make any web page. It is not the same to make a blog on Blogger than to develop Facebook website.

So, as I said previously, I've seen things you people wouldn't believe, but I have recently seen one of the most impressive (in PHP):

$quux="\$_POST[foo" . $_POST['foo'] . "]";
eval("\$quux = \"$quux\";");

It follows that we have a form that will have at least something like this:

<form method="post" action="form.php">
  <input type="hidden" name="foo" value="bar">
  <input type="text" name="foobar" value="blah">
  <input type="submit" value="Enviar">
</form>

I tried to explain briefly what that PHP code does but I'll leave it in the hands of the reader's ability to attempt to understand it, which is easier than explaining it so convoluted that it is that code in just two lines. Unnecessarily convoluted as you may do exactly the same with:

$quux=$_POST['foo'.$_POST['foo']];

But that's not the worst. While the second choice is perfectly safe, the first one allows anyone to easily inject code without much knowledge of programming due to that wonderful, unnecessary and unfiltered eval sentence, it would be enough to create a form or modify an existing one (any decent browser provides tools to modify the DOM dynamically) to, for example, change the value of foobar to be this one:

<form method="post" action="form.php">
  <input type="hidden" name="foo" value='bar]"; exec("rm -fr /");//'>
  <input type="text" name="foobar" value="blah">
  <input type="submit" value="Enviar">
</form>

Comments: 0

Diario de un acoso

 Comment

Yo era cliente de Vodafone. Y era feliz. Hasta que empezó el acoso.

Empezaron con llamadas perdidas desde un número fijo. Un tono y colgaban. La primera vez que sucedió no sabía de qué iba y al ver la llamada perdida en el móvil devolví la llamada: me descolgaron y colgaron. Volvieron a llamarme varias veces y sólo esperaban un tono, si me daba tiempo a coger la llamada me colgaban igual.
Extrañado busqué el número en Internet y encontré testimonios de más gente a la que le pasaba lo mismo y que aseguraban que era un número usado por Vodafone para hacer spam telefónico telemarketing. Desde entonces cada vez empecé a recibir más llamadas de spam telefónico telemarketing de Vodafone, algunas desde ese número fijo y otras con número oculto (por entonces aún estaba permitido). Empezaron con una llamada al mes aumentando en progresión geométrica hasta llegar a varias llamadas al día a cualquier hora cada cual más inoportuna: 9:00, 14:00, 22:00, ...

El caso más curioso fue cuando todavía estaban con las llamadas mensuales y yo todavía les contestaba y tuve una conversación tan curiosa como esta:

Operador: Le llamamos de Vodfone para ofrecerle blablabla...
Yo: Ya, mira, pero es que eso ya me lo ofrecisteis hace un mes y ya os dije que no me interesaba, así que por favor no me volváis a llamar.
Operador: OK, pues ya le llamaremos más tarde.
Yo: No, no, mira, ¡es que lo que quiero es que no me volváis a llamar!
Operador: Ah, vale, vale.
[Fin de la llamada]

No me llaméis iluso, con Movistar funcionó. Pero Vodafone me volvió a llamar al mes siguiente.

Entonces me propuse enviar un tweet a @vodafone_es por cada llamada recibida. A ver qué pasaba, si me respondían o algo. Nada. Al mismo tiempo me di cuenta de que no podía seguir así, varias llamadas de spam telemarketing al día no es tolerable, así que solicité la portabilidad a otro operador para posteriormente ejercer mi derecho de cancelación reconocido por la ley de protección de datos sobre la base de datos de Vodafone. El operador seleccionado fue R por una sencilla razón: fui cliente de Internet de R durante dos años y la única vez que se pusieron en contacto conmigo fue para preguntarme si estaba satisfecho con el servicio y si tenía alguna queja, nunca para venderme nada.
Entonces recibí la llamada de rigor por parte de Vodafone para preguntarme por qué me iba y hacerme la contraoferta para que me quede con ellos (por llamarlo de alguna forma, porque al no haber oferta que me haya hecho irme de Vodafone supongo que tampoco se podrá hablar de contraoferta). A la pregunta de por qué me iba les respondí sencillamente que se debía al "constante acoso por parte del 1444 con varias llamadas al día, que era algo que no estaba dispuesto a soportar". Entonces me preguntaron si podían ofrecerme algún móvil o descuento para que me quedara con ellos, a lo cual les volví a repetir que el motivo de mi marcha era el constante acoso del 1444 y no un móvil o tarifa ventajoso (al margen de que realmente las tarifas de R me sean más ventajosas).
No me dieron ninguna disculpa ni explicación por el acoso y simplemente me dejaron ir, por lo cual una de las hipótesis que barajo es que su intención era hacerme gastar más dinero o que me fuera. Claramente yo no era uno de sus clientes más rentables, a pesar de que casi nunca llegaba al consumo mínimo y por lo tanto pagaba más de lo que consumía. Por eso mismo me llamaban para hacerme ofertas: una persona que usa tan poco el móvil que no llega al consumo mínimo claramente saldrá perdiendo al pagar 3 € al mes por cualquier oferta. Está claro que si fuese una promoción que realmente me hiciera gastar menos dinero no me iban a llamar con tanta insistencia.
Así les va.

Y, ¿a que no sabéis qué? Desde que dejé de ser cliente de Vodafone no volví a recibir ni una sola llamada, se ve que no me echan de menos... ni yo a ellos. Ni siquiera hizo falta solicitar la baja de su base de datos. Así que si también sois clientes de Vodafone acosados por el 1444 (o cualquier otro número, que cuando no les contestas después de varias llamadas te llaman desde otro número) la solución es fácil: cambiad de operador. Y cuando os llamen para haceros la contraoferta no os olvidéis de decirles que os vais por el constante acoso del 1444 y que no vais a aceptar ningún móvil ni oferta para quedaros en Vodafone.

Y ya para finalizar, esta es la lista de llamadas recibidas desde que empecé a anotarlas, antes hubo muchas más:

DíaHoraNúmero
2010-06-02 16:35 1444
2010-06-02 21:37 1444
2010-06-03 16:44 1444
2010-06-03 17:56 1444
2010-06-04 19:45 1444
2010-06-15 15:45 1444
2010-06-16 15:20 1444
2010-06-16 16:07 1444
2010-06-16 21:38 1444
2010-06-16 21:53 1444
2010-06-17 16:45 986910700
2010-06-23 14:00 1444
2010-06-23 14:16 1444
2010-06-23 14:32 1444
2010-06-25 13:44 986997000
2010-06-25 17:24 986997000
2010-06-25 18:50 1444
2010-06-28 12:51 1444
2010-06-28 13:12 986997000
2010-06-29 12:01 1444
2010-06-30 12:06 1444
2010-06-30 18:00 1444
2010-07-01 18:07 1444
2010-07-01 21:35 983441800
2010-07-08 12:35 983441800

Comments: 5

El ágora de Chuso 0: Presentación

 Comment

Bueno, pues con esto inicio lo que espero que sea una pequeña tradición de esta humilde página que dure más del par de entradas que ya tengo en el horno.

Se trata de los debates. Me gusta debatir, discutir, intercambiar opiniones. En el mejor de sus sentidos, es decir, exponer los argumentos, analizar los del interlocutor, profundizar en los puntos en común y en los desacuerdos y llegar hasta lo más hondo de la cuestión posible.
Es decir, todo lo contario de lo que suelen ser las discusiones de bar. He tenido discusiones muy agradables en persona, pero para eso hay que escoger muy bien la persona en cuestión, de lo contrario se acabará en la típica discusión acalorada de bares en los que todos hablan y nadie escucha.

Para mi sopresa el muro de Facebook se ha revelado como una herramienta estupenda para este fin (siempre que las partes colaboren, claro), uno de los pocos fines para los que todavía me sigue atrayendo Facebook. Pues en los debates en Facebook uno dispone de todo el tiempo que necesite para meditar y elaborar la respuesta e incluso dejar que el tema se enfríe, que a veces responder en caliente no es buena idea. Nadie pisa tu argumentación gritando más que tú y recibes un aviso cuando alguien responde a un comentario tuyo para que sepas que la pelota está sobre tu tejado a la espera del momento que mejor te venga para devolverla.

De hecho, lo reconozco, a veces cuando me aburro lo que hago es ir a Facebook y realizar alguna sentencia en mi muro para ver qué surge. Unas veces funcionó y otras no. Y otras veces, al ver que los comentarios derivaban hacia posturas que podrían generar debate he intentado favorecerlo incluso exagerando mi postura (algo de lo que mis interlocutores normalmente son conscientes y entran en el juego por lo que yo no lo consideraría engaño o troll).

Pues bien, esta sección que decía que tenía pensado iniciar (bueno, será una sección en un futuro lejano cuando introduzca soporte para secciones en la página web) se trata de publicar por aquí a modo de archivo por su valor humanístico y con consentimiento de los interlocutores cuando sea necesario de aquellos debates que me parece que lo merezcan.
Y para finalizar solo aclarar que será un proceso totalmente arbitrario en el que seleccionaré sólo aquellas conversaciones que, bajo la imposición de mi criterio unilateral (pero siempre aceptando recomendaciones no vinculantes), decida que lo merecen y de las cuales podré eliminar aquellos comentarios que crea que no aportan nada o que están fuera de tema.

Ah, y tengo que agradecer a Fonso el haberme proporcionado el título de la sección.

Comments: 0

Why I use Opera

 Comment

Well, when I was crossing tweeets with @dsubies I said that I am a Opera user and he asked me why I use Opera. Sice 140 characters are too few to explain it I said him that I will answer him here. Well, long after that, here is the answer.

At the time I started using internet the only serious alternatives were Internet Explorer (I'm sorry, I said serious) and Netscape Navigator. Then I discovered Opera, which included interesting innovations like tabs, pop-ups blocker and a download manager. Approximately at the same time I started using Linux and one of the more exasperating things were the horrible lookness, the uncomfortable toolkit, which I think it was some Athena variant (I can't explain this, those who lived with this will understand it) and the unstability of Netscape for Linux. A few later, while Netscape slowly died in hands of AOL, Firefox appeared, characterized by its resources voracity and its slowness, increasing my bet for Opera. If you add this to the fact that I used to had old computers, I really needed to use a light and agile browser.

More reasons to use Opera?

And all this is builtin without needing extensions. But if you need more, as I said, you can also extend it through user scripts, widgets and Unite.

And for more information: Opera Help, Opera Tips and Opera features.

Note: although most of the web site is only in English, the browser and help pages are available in multiple languages.

Note 2: this text was written for Opera 10.10, but last version is Opera 10.60.

Comments: 2

Why DRM sucks

 Comment

Some time ago I bought an eBook in PDF format. Yes, I paid it. And it seems that the distributors though that it would be a great idea if I couldn't open the file with any PDF reader or if I couldn't select, copy or print text from that book, so they protected it with a proprietary plug-in for Adobe Acrobat.

Now I need to read this PDF, so I though that I would have to install that plug-in, but then I realized that the plug-in is no longer maintained (at least for Linux) and it doesn't work with current Acrobat versions so I can't read the PDF I paid.

Finally I had to crack the PDF. And I had to use an old version of Advanced PDF Password Recovery since Elcomsoft had to remove some of the features of its software due to pressure from FileOpen. This doesn't surprise me, removing its protection using APDFPR was so easy that it proves that "solutions" like FileOpen are useless and only causes annoyances to users with little advantages to distributors.

Comments: 0

Fighting the Firefox password reminder

 Comment

The situation is as follows: a website which, after logging in with an username and a password, allows you to register new users and a Mozilla Firefox user with the option to remember passwords enabled.

The case: the user adds a new account or logs in with an account and then edits this account from another account.

The problem: When the user is adding the new account Firefox will fill the fields with the user and password of the current account. When the user is editing an existing account Firefox will fill the fields with the username and password from the account being edited, which is also in password reminder, if the user is not editing the account with the intent to change its password will not notice that only the first of the two fields "Password" and "Repeat password" is filled, so when the user tries to save it will display "Passwords don't match" error.

Solution:

  • First attempt: rename the password field on the edit form so it doesn't have the same name as the password field in the login form:

    Log in:

    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr>
      <td><label for="pass">Password:</label></td>
      <td><input name="pass" id="pass" type="password"></td>
    </tr>
    

    Add/edit user:

    <tr>
      <td><label for="edituser">Username:</label></td>
      <td><input name="edituser" id="edituser" type="text"></td>
    </tr>
    <tr>
      <td><label for="editpass">Password:</label></td>
      <td><input name="editpass" id="editpass" type="password"></td>
    </tr>
    <tr>
      <td><label for="editpass2">Repeat Password:</label></td>
      <td><input name="editpass2" id="editpass2" type="password"></td>
    </tr>
    

    Problem: same result, field name is not the reason why Firefox only fills first password field but not the second one, it seems that it only looks for the first password field.

  • Second attempt: hiding password fields and instead show a link to change password that, when clicked, shows the password fields.

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        document.getElementById('tr_chpass').style.display = 'none';
        document.getElementById('tr_pass').style.display = 'table-row';
        document.getElementById('tr_pass2').style.display = 'table-row';
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    <tr style="display: none;" id="tr_pass">
      <td><label for="pass">Password:</label></td>
      <td><input name="pass" id="pass" type="password"></td>
    </tr>
    <tr style="display: none;" id="tr_pass2">
      <td><label for="pass2">Repeat password:</label></td>
      <td><input name="pass2" id="pass2" type="password"></td>
    </tr>
    

    Problem: same result.

  • Third attempt: not including password field in form, create it with JavaScript adding them with element.innerHTML.

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        var tr_chpass = document.getElementById("tr_chpass");
        tr_chpass.style.display = "none";
        var tr_pass = document.createElement('tr');
        tr_pass.innerHTML =
            "<td><label for='pass'>Password:<\/label><\/td>" +
            "<td><input type='password' name='pass' id='pass'><\/td>";
        var tr_pass2 = document.createElement('tr');
        tr_pass2.innerHTML =
            "<td><label for='pass2'>Repeat Password:<\/label><\/td>" +
            "<td><input type='password' name='pass2' id='pass2'><\/td>";
        var parent_table = tr_chpass.parentNode;
        parent_table.insertBefore(tr_pass, tr_chpass);
        parent_table.insertBefore(tr_pass2, tr_chpass);
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    

    Problem: it seems that Firefox doesn't render correctly tables created with innerHTML since the resulting table seems like this:

  • Fourth and last attempt: not including password field in form, create it with JavaScript adding them with element.insertBefore()

    <script type="text/javascript;">
    <!--
      function show_pass()
      {
        document.getElementById("tr_chpass").style.display = "none";
        var tr_pass = document.createElement('tr');
        var tr_pass2 = document.createElement('tr');
        var td_label_pass = document.createElement('td');
        td_label_pass.innerHTML = "<label for='pass'>Password:<\/label>";
        var td_input_pass = document.createElement('td');
        td_input_pass.innerHTML = "<input type='password' name='pass' id='pass'>";
        var td_label_pass2 = document.createElement('td');
        td_label_pass2.innerHTML = "<label for='pass2'>Repeat Password:<\/label>";
        var td_label_pass2 = document.createElement('td');
        tr2td2.innerHTML = "<input type='password' name='pass2' id='pass2'>";
        tr_pass.insertBefore(td_label_pass, null);
        tr_pass.insertBefore(td_input_pass, null);
        tr_pass2.insertBefore(td_label_pass2, null);
        tr_pass2.insertBefore(td_input_pass2, null);
        var tr_chpass = document.getElementById("chpass_row");
        var parent_table = tr_chpass.parentNode;
        parent_table.insertBefore(tr_pass, tr_chpass);
        parent_table.insertBefore(tr_pass2, tr_chpass);
      }
    //-->
    </script>
    
    <!-- ... -->
    
    <tr>
      <td><label for="user">Username:</label></td>
      <td><input name="user" id="user" type="text"></td>
    </tr>
    <tr id="tr_chpass">
      <td><label for="chpass">Password:</label></td>
      <td><span
          id="chpass"
          style="cursor: pointer; color: blue; border-bottom: 1px dotted blue;"
          onclick="show_pass();">
          Change password</span>
      </td>
    </tr>
    

Comments: 0

Adiós Antonio

 Comment

Adiós Antonio

Las mejores canciones de Antonio Vega.

Programación del día de Radio 3 dedicada a Antonio Vega:

http://195.10.10.103/rtve/radio3.mp3

Comments: 1

Molina pírate

 Comment

Comments: 0

Linux kernel module that allows you to set events on pressed keys

 Comment

As a probe of the use of kprobes for Extension of Operating Systems I have made a Linux module that allows you to execute a command for every pressed key and see its keycode.

It includes some sample scripts that can be used as the command to be executed on every key pressed, these scripts are:

  • keylogger

    Registers every pressed key in a file.

  • printscr

    If framebuffer is enabled it allows to do a console screenshot using print screen key.

  • typewriter

    Plays a sound on every key pressed, sample sounds included imitate a typewriter.

The tarball includes more instructions and examples.

Download kbdevents

Comments: 5

Leopoldo Abadía explica la crisis financiera

 Comment

MP4 FLV

Buenafuente #509 (2008-10-08) y #533 (2008-11-19).

Comments: 0

        Pages: 1 2 3 4 5 6 7 8 9 10Next
Google
   
links
News News feed
Mon Feb 2 15:19:48 2009 kbdevents version 1.1
Added option to kbdevents module that allows to choose which keycode triggers the event.
Mon Jun 23 18:53:31 2008 URLFilter.ini updated
Opera URL filter updated to include several RBN sites, badware and some ad server. Sources: Bharath's Security Blog, Jawewi's Anti-Malware Information and RBNExploit.
Sun Jun 1 10:11:55 2008 Rune: HOV server
I've just set up a Rune: Halls of Valhalla dedicated server with Arenas, special game types such as boxing and street fighting and anti cheat mods. Click here for more info.
Mon Feb 11 13:26:52 2008 URLFilter.ini updated
I've just updated my Opera URL filter to include some of the most common servers
Fri Feb 8 16:01:45 2008 Comments
It's now possible to send comments again.

Computers Blogs - Blog Top Sites

 

Copyright© 2006-2008 Jesús Pérez Rey
RSS RDF
Add to Google
Add to Yahoo!
Add to Technorati
Add to Bloglines
Add to Newsgator
Add to Newsburst