This is an old revision of the document!


CAPTCHA amb COBOL

Degut a la gran expansió que actualment pren el llenguatge COBOL i la interfície de terminal de text he pensat que és molt necessària l'aplicació de la tecnologia CAPTCHA als logins de les aplicacions Cobol.

En aquest post s'ensenyarà com aplicar un Captcha a un programa Cobol. Es mostra un text en ascii-art i l'usuari l'ha de transcriure amb el teclat. Si l'encerta, el programa continua però si el falla, el programa s'atura.

Es recomana el compilador gnucobol però pot funcionar amb qualsevol altre que admeti crides a sistema CALL “SYSTEM” USING

Per a començar, ens cal el següent:

  • Una shell de Unix (Bash, Korn…).
  • El compilador de Cobol gnucobol (pot ser qualsevol altre que admeti CALL).
  • L'entorn del compilador carregat (variable COB_LIBRARY_PATH).
  • El programa figlet.
  • Un editor de text (vi, emacs, …)
  • Poca feina.

Per anar al gra, el que cal afegir al nostre programa, per a que implementi el Captcha, és el següent:

Dins la CONFIGURATION SECTION, afegirem aquest descriptor de fitxers:

FILE-CONTROL.
  SELECT captchafile ASSIGN TO captchafilename
         ORGANIZATION IS LINE SEQUENTIAL.

I dins la FILE SECTION afegirem la definició del descriptor:

     FD captchafile.
     01 FILEGLOBAL.
        02 FILELINE         PIC X(80).
     88 EOFcaptchafile             VALUE HIGH-VALUES.

En la WORKING-STORAGE SECTION afegirem les variables que utilitzem per al Captcha:

     77  CAPTCHA-Y        PIC 9(2) VALUE 1.
     77  captchafilename  PIC X(25) VALUE SPACES.
     01  BANNERCMD        PIC x(22) value "/usr/bin/figlet-figlet".
     01  random-number    PIC X(10).
     01  CAPTCHA          PIC X(10).
     01 ARGV                 PIC X(100) VALUE SPACES.
        88 RECV                         VALUE SPACES.

Ja en la PROCEDURE DIVISION, en la SECTION en la que treballem, afegim:

         ACCEPT random-number FROM ENVIRONMENT "RANDOM2".

Aquesta sentència pren un nombre al·leatori de la variable d'entorn (de la shell Unix) $RANDOM2.

         IF random-number = SPACE OR random-number = LOW-VALUE THEN
          DISPLAY "PROGRAM NOT CORRECTLY INITIATED. ABORTING EXECUTION." LINE 21 COLUMN 2
          CALL "C$SLEEP" USING BY CONTENT 3 END-CALL
          STOP RUN
         END-IF

Aquest bloc