planet

Life in SSH (Secure Shell)

mm-barabba - Mer, 29/07/2015 - 00:13

Provo a mettere insieme alcuni appunti che nel tempo si sono ammucchiati nel cassetto, cercando di mantenere un ‘ordine logico nei passi.

Le solite cose che si trovano in rete, però in questo caso affiancate alla mia esperienza di utilizzo pratico.

Da tempo per la gestione del raspberryPI e del server a distanza mi sono affidato a SSH, e le possibili soluzioni che si appoggiano (vedi immagine sotto) sono diverse, così vediamo di affrontarne alcune tra le più interessanti che ho potuto sperimentare di persona.

Per i test come server abbiamo

  • Debian Jessie (da poco aggiornata) come server

Un vecchio AtlhonXP1700 con 2GB di ram e 2 dischi ATA in RAID1 con mdadm , (la sua storia è sparsa nel blog), abbiamo a disposizione apache2, mysql e php lato web , poi è pure relay server di posta, scarica con fetchmail e finisce in IMAP locale.

  • RaspberryPI

Un giocattolino con 512MB di ram, una SD da 8GB più una chiavetta USB come storage data con rullante Raspbian Jessie minimalizzata senza X (just only SSH), c’è apache2 (colpa di rtorrent-gui) e postfix per le mail di sistema (anche di questo la storia è sul blog)

Per le connessioni abbiamo 3 distinte categorie

  1. PC fisso o portatile, con win  o una distro GNU/Linux (meglio se Debian)
  2. Tablet 10.1 con android 4.2 (simply rooted)
  3. Smartphone Galaxy S3 (simply rooted)

L’elenco degli obiettivi :

  • configurazione del server SSH
  • configurazione client SSH
  • sshfs (kill FTP)
  • browser proxificato
  • IMAP in tunnel

Dopo esserci lavati le mani passiamo al lavoro.

Assolutamente necessaria una colonna sonora all’articolo, da ascoltare in lettura come sotto fondo.

Configurazione del server SSH

Cominciamo con l’installare un pò di pacchetti :  ssh, openssh-server e openssh-client

Di default il demone parte all’avvio così che possiamo rifarci subito sul file di configurazione /etc/ssh/sshd_config che segue nella versione default.

# What ports, IPs and protocols we listen for , default 22 ### consiglio di cambiare subito ### dopo la 1024 vanno bene quasi tutte Port 9731 # Use these options to restrict which interfaces/protocols sshd will bind to #ListenAddress :: #ListenAddress 0.0.0.0 Protocol 2 # HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key #Privilege Separation is turned on for security UsePrivilegeSeparation yes # Lifetime and size of ephemeral version 1 server key KeyRegenerationInterval 3600 ServerKeyBits 1024 # Logging SyslogFacility AUTH LogLevel INFO # Authentication: LoginGraceTime 120 PermitRootLogin no StrictModes yes RSAAuthentication yes PubkeyAuthentication yes #AuthorizedKeysFile     %h/.ssh/authorized_keys # Don't read the user's ~/.rhosts and ~/.shosts files IgnoreRhosts yes # For this to work you will also need host keys in /etc/ssh_known_hosts RhostsRSAAuthentication no # similar for protocol version 2 HostbasedAuthentication no # Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication #IgnoreUserKnownHosts yes # To enable empty passwords, change to yes (NOT RECOMMENDED) PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords #PasswordAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosGetAFSToken no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes X11Forwarding no X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes #UseLogin no #MaxStartups 10:30:60 #Banner /etc/issue.net # Allow client to pass locale environment variables AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication.  Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. UsePAM yes

Dalla configurazione di base mi piace modificare la porta che al posto della classica 22 diventerà una a nostra scelta ( dopo la 1024), almeno per eliminare certi scan che a priori si buttano sulla porta di default (22).

Con questa configurazione per collegarsi basterà conoscere l’indirizzo della macchina, il nome utente e la password, ma è possibile creare una cosa più simpatica inserendo una chiave nell’autenticazione, facendo così sarà necessario inserire nome utente e indirizzo della macchina inoltre la chiave pubblica deve essere presente sul server e dovrà essere inserita la password di sblocco della chiave ( la cui corrispondente chiave privata è sulla macchina client).

La parte modificata per forzare l’accesso con le chiavi e password è di sole 3 righe:

ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no

Oltre alla porta cambiata come segnalato a priori, occorre decommentare la riga:

AuthorizedKeysFile %h/.ssh/authorized_keys

Senza uscire dalla connessione riavviare il servizio

#sudo systemctl restart ssh

o

#/etc/.init.d/ssh restart

apriamo un’altra connessione per provare a vedere se tutto funziona.

Se avete problemi basta riportare a ‘yes‘ le opzioni sopra indicate e attenzione perché se non avete accesso fisico alla macchina un piccolo errore vi negherà qualsiasi tentativo di connessione futura.

Possiamo usare un’utente predefinito e dedicato al solo accesso SSH ! (useradd begamorta919)

Creare nella dir dell’utente prescelto per la connessione

/home/user/.ssh

il file

authorized_keys.

Se la directory non esiste, crearla con proprietario l’user prescelto:

$ mkdir /home/user/.ssh $ chmod 700 /home/user/.ssh $ cd /home/user/.ssh $ touch authorized_keys $ chmod 600 authorized_keys

Prestiamo attenzione ai permessi attribuiti.

Ora inseriamo le chiavi pubbliche nel file authorized_keys.

Come amante di MC e mcedit faccio la cosa manualmente, ma pare sia possibile usare un semplice comando:

$ scp -P <porta> ~/.ssh/id_rsa.pub <username>@<ip del server>:~/.ssh/authorized_keys

Per maggiori informazioni consultare anche : ssh-copy-id e ssh-add

Se la modifica viene fatta con un editor di testo (es. mcedit)

ATTENZIONE : inserire ogni chiave in una singola riga.

A riguardo potete anche consultare i miei vecchi appunti : SSH Sicuro .

Volendo da Jessie è possibile avere antrambe i controlli (chiave pubblica+password chiave + password utente) inserendo una riga

AuthenticationMethods publickey,password

è possible commentare

#AuthorizedKeysFile     %h/.ssh/authorized_keys

che è di default.

tips

Nel caso non siano ancora presenti le chiavi ECDSA aggiungere a sshd_config

HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key

seguite dalla riconfigurazione con :

#dpkg-reconfigure openssh-server

Ora che la configurazione del server è terminata passiamo alla connessione con un client.

Passiamo la lettura alla pagina 2

Categorie: planet

Server Jessie Apache2 2.4 Hardening (libapache2-mod-security2)

mm-barabba - Sab, 06/06/2015 - 02:19

Proprio la settimana scorsa stavo pistolando con il server, il caldo era alle porte così prima di fare la sauna mi sono lanciato nell’aggiornamento verso la nuova stable , il grande passo quando non si possono interrompere dei servizi per molto tempo.

Wheezy ---> Jessie

Sulla macchina ho un Raid1 così prima di lanciarmi nell’avventura ho pensato di rimuovere un disco e tenerlo come backup,in caso di problemi lo rimontavo e tutto tornava come prima,  poi con un disco pulito che avevo pronto, ho risistemato con mdadm il Raid1.

Dopo aver fatto rullare per bene la macchina con apt-get, tra le cose su cui ho dovuto più lavorare, c’è stato apache2 che passando dalla versione 2.2 alla 2.4 é cambiato  (in meglio ).

Aggiusto qualche cosa quà e là e mi trovo libapache2-mod-security2 installato, ma se pur attivo non sembra fare il suo lavoro.

Vediamo ora come fare alcuni test e attivare il modulo dormiente.

Partiamo ora nell’avventura

Dai primi passi ho preferito tenere i miei file di configurazione perché avevano modifiche consistenti, e qui devo indagare meglio su cosa è stato messo di nuovo, così in fase di aggiornamento trovo subito qualche errore

Setting up libapache2-mod-security2 (2.8.0-3) ... Installing new version of config file /etc/modsecurity/modsecurity.conf-recommended ... apache2_invoke: Enable module security2 apache2_reload: Your configuration is broken. Not restarting Apache 2 apache2_reload: apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/spdy.load: Cannot load /u sr/lib/apache2/modules/mod_spdy.so into server: /usr/lib/apache2/modules/mod_spdy.so: undefined symbol: ap_log_cerror

azz rimuoviamo il modulo mod-spdy (ottimizzato per apache 2.2) (https://code.google.com/p/mod-spdy/) e proseguiamo .

[....] Restarting web server: apache2[Wed May 27 23:56:56.718733 2015] [core:warn] [pid 29388] AH00117: Ignoring deprecated use of DefaultType in line 159 of /etc/apache2/apache2.conf. AH02559: The SSLCertificateChainFile directive (/etc/apache2/conf.d/ssl.conf:4) is deprecated, SSLCertificateFile should be used instead  failed!

un problema di certificati per HTTPS, commentiamo la riga 4, #SSLCertificateChainFile ssl/root.crt ora non é più necessario e proseguiamo.

[warn] The apache2 instance did not start within 20 seconds. Please read the log files to discover problems ... (warning).

Qui c’è qualcosa di nuovo che mi son perso, infatti in /etc/apache2/apache2.conf occorre impostare come sotto :

Mutex file:${APACHE_LOCK_DIR} default PidFile ${APACHE_PID_FILE} #LockFile /var/lock/apache2/accept.lock - disable this, old value #PidFile /var/run/apache2.pid

proviamo a riavviare apache2

#/etc/init.d/apache2 start

se abbiamo qualche problema nell’ avviare (start/restart/reload) troviamo la lista dei processi

#pidof /usr/sbin/apache2

e uccidiamo

#kill -9 pid segnalati

Per finire sui server virtuali una nuova direttiva : https://httpd.apache.org/docs/2.4/upgrading.html

* AllowOverride now defaults to None

Con questo ho chiuso con gli errori nel log di apache2, mi resta qualche applicazione che avevo installato con qualche problema ad esempio mediawiki 1.16 da un’errore php e consegna le pagine bianche, ma avendo aggiornato tutto quel che riguarda il web (apache2, php e mysql) qualcosa non ha retto.

Ne approfittiamo per fare pulizia di roba che si usava poco o solo provata.

Partiamo ora con la parte della sicurezza e se libapache2-mod-security2 non è ancora installato andiamo a installarlo.

NOTA : per jessie la nuova versione è libapache2-mod-security2, su wheezy cercate in backports altrimenti la vecchia versione è libapache2-modsecurity,

#aptitude install libapache2-mod-security2

per vedere se il modulo è caricato:

# apachectl -M | grep --color security  security2_module (shared)

 

per la configurazione dobbiamo editare il file modsecurity.conf che potrebbe essere disattivato

cd /etc/modsecurity mv modsecurity.conf-recommended modsecurity.conf nano /etc/modsecurity/modsecurity.conf

cerchiamo questa riga

SecRuleEngine DetectionOnly

e cambiamo con

SecRuleEngine On

riavviare il servizio apache2

per maggiori info anche se riferite alla vecchia versione del modulo potete leggere questo articolo : LINK

ora troveremo anche un nuovo file di log

# ls -l /var/log/apache2/modsec_audit.log -rw-r----- 1 root root 27196808 Jun  6 01:06 /var/log/apache2/modsec_audit.log

Consiglio di inserire manualmene la rotazione del log

nano /etc/logrotate.d/modsecurity /var/log/modsec_audit.log { rotate 1 compress missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }

more info : modsecurity-logrotate-script

Ora che il modulo è attivo per funzionare ha bisogno di regole così cominciamo a mettere qualche link

#ln -s /usr/share/modsecurity-crs/modsecurity_crs_10_setup.conf /etc/modsecurity/modsecurity_crs_10_setup.conf

Ora mettiamo le regole base_rules e come optional per i paranoici optional_rules

#cd /usr/share/modsecurity-crs/base_rules #for f in * ; do ln -s /usr/share/modsecurity-crs/base_rules/$f /etc/modsecurity/$f ; done #cd /usr/share/modsecurity-crs/optional_rules #for f in * ; do ln -s /usr/share/modsecurity-crs/optional_rules/$f /etc/modsecurity/$f ; done

per rendere effettive le modifiche è necessario riavviare il servizio

#service apache2 restart

volendo fare un test possiamo andare sul nostro server e :

http://www.example.com/?test=MY_UNIQUE_TEST_STRING

la risposta dovrebbe essere : 503 “Service Temporarily Unavailable” 

more info : LINK

Facendo un po di prove ho trovato che usando le mie applicazioni avevo qualche problema, modsecurity bloccava troppo !!!

Parto dalla consultazione dei log mentre provo ad accedere ai miei servizi

#tail -f /var/log/apache2/modsec_audit.log

il log parla chiaro e mi indica la regola e la riga esatta in modo che la posso disabilitare commentandola (#) e dopo ogni modifica ricarichiamo il servizio

#service apache2 reload

Volendo fare alcune prove possiamo usare nikto, basta scaricare e scompattare l’archivio ed infine eseguire :

$ perl nikto.pl - Nikto v2.1.5 --------------------------------------------------------------------------- + ERROR: No host specified        -config+            Use this config file        -Display+           Turn on/off display outputs        -dbcheck            check database and other key files for syntax errors        -Format+            save file (-o) format        -Help               Extended help information        -host+              target host        -id+                Host authentication to use, format is id:pass or id:pass:realm        -list-plugins       List all available plugins        -output+            Write output to this file        -nossl              Disables using SSL        -no404              Disables 404 checks        -Plugins+           List of plugins to run (default: ALL)        -port+              Port to use (default 80)        -root+              Prepend root value to all requests, format is /directory        -ssl                Force ssl mode on port        -Tuning+            Scan tuning        -timeout+           Timeout for requests (default 10 seconds)        -update             Update databases and plugins from CIRT.net        -Version            Print plugin and database versions        -vhost+             Virtual host (for Host header)                 + requires a value         Note: This is the short help output. Use -H for full help text.

mettiamo i dati interessanti come ad esempio

$perl nikto.pl -host xxx.xxx.xxx.xxx -port 443 -output puppa.txt - Nikto v2.1.5 --------------------------------------------------------------------------- + Target IP:          xxx.xxx.xxx.xxx + Target Hostname:    host***-***-*******.***-***-b.*******.*********.it + Target Port:        443 + Start Time:         2015-06-05 23:01:06 (GMT2) --------------------------------------------------------------------------- + Server: Apache + The anti-clickjacking X-Frame-Options header is not present. + No CGI Directories found (use '-C all' to force check all possible dirs) + 6544 items checked: 13 error(s) and 1 item(s) reported on remote host + End Time:           2015-06-05 23:24:39 (GMT2) (1413 seconds) --------------------------------------------------------------------------- + 1 host(s) tested

 

su una macchina dove non è abilitato the sound is different

- Nikto v2.1.5 --------------------------------------------------------------------------- + Target IP: xxx.xxx.xxx.xxx + Target Hostname: host***-***-****.***-***-b.******.********.it + Target Port: 443 --------------------------------------------------------------------------- + SSL Info: Subject: /CN=*******.**** Ciphers: ECDHE-RSA-AES256-GCM-SHA384 Issuer: /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org + Start Time: 2015-06-06 10:43:23 (GMT2) --------------------------------------------------------------------------- + Server: Apache + Retrieved x-powered-by header: PHP/5.4.39-0+deb7u2 + The anti-clickjacking X-Frame-Options header is not present. + Cookie PHPSESSID created without the secure flag + Cookie PHPSESSID created without the httponly flag + OSVDB-3268: /cgi-bin/: Directory indexing found. + Server leaks inodes via ETags, header found with file /favicon.ico, inode: 3235957, size: 1968, mtime: 0x3ee45eb6bda00 + DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details. + Cookie p7token created without the secure flag + Cookie TenantHash created without the secure flag + Cookie TenantHash created without the httponly flag + /index.php/\"><script><script>alert(document.cookie)</script><: eZ publish v3 and prior allow Cross Site Scripting (XSS).  + OSVDB-682: /webalizer/: Webalizer may be installed. Versions lower than 2.01-09 vulnerable to Cross Site Scripting (XSS). + OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings. + OSVDB-3268: /img/: Directory indexing found. + OSVDB-3092: /img/: This might be interesting... + Uncommon header 'x-frame-options' found, with contents: DENY + Uncommon header 'x-ob_mode' found, with contents: 1 + Uncommon header 'x-content-security-policy' found, with contents: default-src 'self' ;options inline-script eval-script;img-src 'self' data: ; + Uncommon header 'content-security-policy' found, with contents: default-src 'self' ;script-src 'self' 'unsafe-inline' 'unsafe-eval' ;style-src 'self' 'un safe-inline' ;img-src 'self' data: ; + Uncommon header 'x-webkit-csp' found, with contents: default-src 'self' ;script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline ' ;img-src 'self' data: ; + Cookie phpMyAdmin created without the httponly flag + OSVDB-3268: /temp/: Directory indexing found. + OSVDB-3092: /temp/: This might be interesting... + OSVDB-3092: /cgi-bin/: This might be interesting... possibly a system shell found. + OSVDB-3093: /.bash_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web. + OSVDB-3268: /icons/: Directory indexing found. + OSVDB-3233: /icons/README: Apache default file found. and more more more

Categorie: planet

RaiNix – la RAI su bash

mm-barabba - Gio, 16/04/2015 - 00:13

Era il 1985 quando i Cult pubblicavano Love, anche se lo scoprì qualche anno dopo.

Quel sound era come dinamite, che lanciato dalle potenti casse del mio renault 4 faceva volare sull’ asfalto.

La pirateria non esisteva ancora (intesa come lo è oggi), c’era la tassa aggiuntiva sul bollo auto per chi aveva l’autoradio, che nessuno pagava perché si sapeva che non veniva controllato, e si comperava il disco in LP o ce li si scambiava per poter registrare una magnifica cassetta audio da mettere in macchina.

Sui potenti impianti Hi-Fi di casa si consumava un rito “la copia”, armati di pazienza per via delle registrazioni a velocità 1:1.

Ora le tecnologie non più preistoriche consentono molto altro, ma lo spirito di rimanere liberi non è cambiato.

Oggi si può accedere alla TV anche dal web e con diverse tecnologie, da smarthphone e tablet vari, dal vostro MAC, dall’ultimo Windows e pure da Linux.

Partiamo dall’idea di usufruire di un servizio con un player che impegni meno risorse possibili (magari abbiamo ancora un 686) senza dover installare software propietario o cloni open.

Download “RaiNix 1.4” RaiNix1.txt – Scaricato 250 volte – 16 kB

Preleviamo il file RaiNix.txt, che si presenta nella nuova versione 1.2 codename “Bobo” e  rinominiamolo .sh o togliamo completamente l’estensione .txt

$ mv RaiNix.txt RaiNix $ mv RaiNix.txt RaiNix.sh

poi rendiamolo eseguibile per l’utente.

$ chmod 744 RaiNix

Preoccupiamoci di aver installato ffmpeg,dialog e xterm, a questo punto eseguiamo il file.

$ ./RaiNix

et voilà

Per avere un bluon flusso dati e un video fluido consiglio di impostare la qualità video che spesso dipende dalla qualità/velocità della connessione, fatto questo spostiamoci sull’opzione desiderata grazie all’uso della tastiera e con la pressione del tasto “Enter” godiamoci il video.

 

Tutto questo mi è stato possibile usando anche per le prove il mio vecchio AthlonXP sul quale gira da parecchi anni una Debian (Gnu/Linux) testing fin dai tempi di lenny.

L’altra volta mi sono state mosse critiche dal fenomeno di turno che vede la Rai dal suo potente i7 e Chrome su Debian64, peccato che Chrome/Chromium per mancanza di SSE2 sul mio processore non si può installare, così non mi è possibile fare queste magate.

Lasciate perdere altre opzioni e non scassate! a me piace così, non dovete convincermi a usare altro.

other LINK by a friend

Cavalcate ora la potenza della vostra shell preferita.

 

Aggiornamento 24/06/2015 (v 1.3.1)

Caro Babbo Natale che ci scrivi dal Polo Nord, posso provare a cercare di capire i tuoi problemi ma la geolocalizzazione rende la vita non facile a chi vuole accedere al servizio e si trovi fuori dagli indirizzi IP di italica provenienza.

Però non disperare perché sembra che con un’altra diavoleria di bash & python sia possibile ottenere qualche maledetto flusso dati da dare in pasto a ffplay

Download “DePhone 1.3.1” DePhone.zip – Scaricato 54 volte – 5 kB

prestate attenzione alla versione, il programma verrà aggiornato mantenendo lo stesso link

be happy

Categorie: planet

[ Check-Raid ] Stoppare il controllo del Raid

toshidex - Mar, 22/07/2014 - 00:18
A volte potrebbe capitare di dover stoppare lo script raid-check e per farlo non basta un kill -9 PID. Per stoppare il processo bisogna cambiare lo status del file sync_action. # echo "idle" >/sys/block/DEVICE/md/sync_action dove al posto di DEVICE dovete scrivere il vostro device, esempio (md1,md3 o md0).   Dev Null Articoli Correlati:
  1. JCKEditor su Joomla 1.5 problemi controllo corpo dell’articolo
  2. IPv6 addrconf: prefix with wrong length 56
  3. L’antico Hard Disk andava portato in salvo.
Categorie: planet

Generare le traduzioni per i modelli di ActiveRecord

maxer - Lun, 17/03/2014 - 09:30

Ruby on Rails è sicuramente un framework molto potente, ma lo sviluppatore italiano soffre spesso del problema della traduzione dei modelli, in quanto la nomenclatura usata è prevalentemente inglese ed è best practice usare l’inglese nei modelli e negli attributi. Da qui la necessità di tradurre i nomi dei modelli e i nomi degli attributi dei modelli.

Dopo aver speso una considerevole quantità di tempo a ricopiare a mano gli attributi dei modelli e inserire le traduzioni ho trovato questa gemma: i18n_generators che permette di generare il file usato per poi tradurre il nome dei modelli e degli attributi.

Una volta installata come gemma, il funzionamento è semplice:

$ rails g i18n_translation it

il comando (ci metterà un po’) analizzerà i nostri modelli e genererà il file con tutti gli attributi, pronto per accogliere le nostre traduzioni. Inoltre, se eseguito nuovamente in seguito, conserverà le chiavi esistenti aggiungendo quelle mancanti, semplificandoci di molto il lavoro.

 

Categorie: planet

Pulire l’html da tag non necessari con sanitize

maxer - Gio, 06/03/2014 - 13:56

Continuando quanto detto ieri, circa la chiusura di tag html lasciati aperti, oggi vi presento un’altra gemma molto interessante: sanitize.

L’obiettivo di questa gemma, basata su nokogiri, è di pulire l’html da tag non voluti o malevoli.

Una volta installata, potremo accedere al metodo “clean” della classe “Sanitize” nel seguente modo:

Sanitize.clean(html)

questo rimuoverà, come impostazione di default, tutti i tag html. Oltre al filtro di default, moooolto restrittivo, sono presenti anche i seguenti filtri:

Sanitize::Config::RESTRICTED che permette solo la formattazione del test

Sanitize::Config::BASIC che permette la formattazione del testo, le liste e i link

Sanitize::Config::RELAXED che permette quanto detto sopra con l’inclusione di immagini e tabelle

L’uso è semplice:

html = '<!DOCTYPE html><html><b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg"></html>' Sanitize.clean(html, Sanitize::Config::RELAXED) # => '<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg">'
Categorie: planet

Forzare la chiusura dei tag html con nokogiri

maxer - Mer, 05/03/2014 - 13:36

Affrontando l’esportazione di un sito sviluppato alcuni anni fa in Ruby on Rails, mi sono accorto che chi ha inserito i contenuti ha lasciato dei tag html aperti. La cosa da non pochi problemi nel sistema di destinazione in quanto destabilizza la grafica (sapete anche voi quanto casino può generare un <div> non chiuso).

Per risolvere questo problema possiamo usare la gemma nokogiri, un parser html e xml.

La sintassi è semplice:

Nokogiri::HTML.parse('<div>').inner_html

Ci restituirà la struttura completa di una pagina html con il <div> correttamente chiuso:

"<html><body><div></div></body></html>"

Ovviamente noi non abbiamo bisogno di tutta la struttura della pagina, quindi possiamo sfruttare il metodo .children che restituisce il tag successivo a quello più esterno:

Nokogiri::HTML.parse('<div>').children.children.inner_html => "<div></div>"

In questo modo abbiamo il nostro codice html corretto.

Categorie: planet

Sclero da e-commerce

maxer - Gio, 30/01/2014 - 16:31

Oggi sono vicinissimo allo sclero… per colpa di un e-commerce realizzato con un prodotto (opencart) che, insieme ai vari prodotti ecommerce e anche qualche forum, mi hanno deluso profondamente.

Veniamo a noi: quando uno un cms/framework/prodotto ben fatto (drupal o wordpress) mi trovo davanti a moduli self-containet che, tramite hook o funzioni, interagiscono col cms/framework e fanno il loro dovere.

Con opencart (il colpevole in questo caso) questo non succede e i moduli più interessanti richiedono patch o l’utilizzo di vqmod, che in pratica va a modificare i sorgenti a runtime… l’idea di base potrebbe essere buona, se non fosse che ad ogni aggiornamento c’è da sperare che tutto combaci alla perfezione, che tutti i plugin siano compatibili con la nuova versione e che le modifiche che apportano ai sorgenti non vadano in conflitto tra di loro…

Così non è possibile lavorare, secondo me… ora inizio a studiare spree

Categorie: planet

Report attivitá del mese

risca - Ven, 06/09/2013 - 19:31

Cari internauti,

prendendo ispirazione dal planet di debian.org ho deciso periodicamente di fare il punto delle mie attivitá correlate al software libero mese per mese.

Agosto é stato un periodo ricco di emozioni legate alla comunitá Debian, ma con un sapore un po' amaro per il susseguirsi di vicende personali e lavorative che mi sono stato fonte di cruccio e distrazione. Peró permettetimi adesso di concentrarmi sulle prime e dimenticare per un po' le seconde.

In questo agosto 2013 c'é stato il 20o compleanno di Debian e la 13a edizione del DebConf. L'ubicazione é stata una delle piú appropriate, uno splendido camp nei pressi di Vaumarcus, vista lago e montagne. Per fortuna il posto é comodo anche per noi italiani, traducendosi in poco meno di 3 ore di auto da Torino e Milano. Ossia una occasione troppo ghiotta per non provare a farci un salto, e cosí è stato. Sono riuscito infatti a tagliarmi almeno tre giorni per partecipare al meeting. Come al solito i talk sono stati di altissimo livello ma devo ammettere che, essere là e partecipare dal vivo é tutta un'altra cosa rispetto a vedersi. Ho avuto modo di conoscere persone fantastiche ed il piacere di scambiare libere opinioni, o di abbinare alcuni nomi che vedo periodicamente nelle mailing list e IRC con i rispettivi volti. Consiglierei a tutti di fare un salto alla prossima occasione buona, seppure conscio che purtroppo la prossima edizione sia parecchio lontana (Portland, Oregon, USA).

Finalmente ho pubblicato su github gitorious il codice di proprietary OS destroyer. A dire il vero dovrei migliorare ancora un po' lo stile del messaggio, peró il piú é già stato fatto. Non posso che augurarmi che lo script abbia un buon successo e sia adottato anche da altri portali oltre il mio!
Ulteriore informazioni sono reperibili sul mio wiki (work in progrss).

Sará forse il lungo periodo di totale far niente in spiaggia al mare (ma che interminabile noia) ma ho finalmente rimesso in cantiere il progetto di costruirmi la mia prima RepRap, la stampante 3-D libera! Ad essere sinceri il progetto langue giá da un po' nel mio cassetto dei sogni irrisolti. Avevo giá provato ad iniziare il progetto circa un annetto fa, ma senza poi alcun seguito. Quest'anno invece ho l'intenzione di appoggiarmi ad un FabLab per avere un po' di aiuto ed assistenza. Forse cosí sará la volta buona ;-)

Bene, per agosto é tutto, speriamo con settembre di riuscire finalmente a fare qualcosa di interessante...

 

P.S.: inoltre ad agosto ho iniziato a seguire qualche post di programmazione di Coursera. Consiglio a tutti di buttarci un occhio...

Categorie: planet

The Beauty of Programming

risca - Mer, 26/06/2013 - 01:52

Perchè l'informatica può affascinare così tanto, seppure vista da fuori i più la percepiscono come una attività noiosa? Come è possibile che 797 cm2 possano essere più interessanti di tutto ciò che accade attorno?

Penso che (stima molto a ribasso) per il 99,999% del suo tempo di vita ad un generico processore del computer sia richiesto di eseguire compiti tristi, al pari dell'intelligenza di una lavatrice1. Ad esempio rapire l'utente di un social network illudendolo di avere un vita sociale, lobotomizzare il giocatore con uno sparatutto o fare imprecare il lavoratore con un programma di merda scritto da un programmatore che nulla sa in merito a ciò che il suo software andrà ad effettuare ma che si fa pagare ugualmente bei soldoni. Poi, in alcuni casi più unici che rari, la CPU non viene impiegata per far girare il solito pornazzo con flash, né per cliccare sul primo allegato dell'amico ed infettare il computer, o far girare un antivirus talmente intelligente da ciucciare talmente tante risorse da bloccare il computer stesso.

Qualche rara volta invece il PC da strumento diventa il fine. Ossia esiste qualche strano2 individuo della società moderna che usa il PC per amore del PC stesso. Non sta davanti al monitor né per produrre qualcosa di utile né per diletto o per trascorrere del tempo. Invece lo usa per capire come funziona e per crearsi le proprie regole.

Certo, alcuni di questi individui a volte presentano tratti singolari, ma i più li riconosci semplicemente perché hanno lo sguardo curioso, sanno meravigliarsi e stupirsi delle piccole cose, quelle a cui i più non danno peso. Sanno apprezzare la bellezza della logica e spesso sul loro computer gira qualcosa di insolito. Alcuni non usano persino il topo! e per fare qualsiasi cosa digitano parole su parole e sigle incomprensibili. E se li guardi stupito rispondono, bhe è così perché comodo e più veloce, guardano lo schermo (monitor nero soffocato di caratteri bianchi) è dicono che sia bello...

Invece no, non è bello, è magnifico. Il nostro acaro può con la forza della parola plasmare mondi paralleli, creare nuove regole e ordini. Si tratta di universi talmente complessi in cui a volte è facile perdersi nella propria logica. L'algoritmo è un esempio di poesia. Saper descrivere una legge nel modo più elementare possibile, quello che appena lo vedi capisci che è quello giusto.

Così dedico queste due righe al piacere di giocare con l'informatica in sé. Certo, il computer può essere anche un elettrodomestico utile e divertente, ma il massimo piacere è la possibilità di giocare con la logica e la matematica in una propria dimensione.

Grazie a tutta la comunità e a tutti gli appassionati del software libero.

 

Come diceve il sommo poeta...
6661747469206e6f6e20666f737465206120766976657220636f6d652062727574692c206d612070657220736567756972207669727475746520652063616e6f7363656e7a610a

Note
  1. sì, proprio come molti non sanno come usare la lavatrice altrettante persone non sanno usare minimante un computer.
  2. Ad esempio ecco cosa pensa Linus Torvalds della bellezza di programmare.
Categorie: planet

Chiavetta ONDA TM201 (1ee8:0064). Come non sviluppare il software libero.

risca - Mer, 19/06/2013 - 15:23

Ebbene sì, i cellulari da 100 Eurozzi hanno a volte una capacità di connessione un po' infima. Da qui l'urgenza di comprarmi la chiavetta Internet per la mia connessione in mobilità.

Pur volendo fare una scelta consapevole, specie se in un posto di villeggiatura, si è costretti a prendere quel che capita sullo scaffale del negoziante TIM/WIND/Vattelapesca. E non puoi nemmeno chiedere consiglio perché se parlassi di potenza e di onde tutt'al più il commesso ti risponderebbe cosa centri il capoluogo più alto d'Italia con il mare.

E così mi finì tra le mani lei, bianca e lucida come un supposta, ma di dimensione un po' più grande e meno scivolosa: la chiavetta ONDA TM201, riferimento lsusb 1ee8:0064. Antenna interna e, udite udite, supporto Linux ben indicato sulla confezione. Ganzo ganzo me la porto a casa e non aspetto altro che inserirle nel posteriore del mio portatile, sapendo che come dice la confezione con Linux va che è un bomba.

Aspetto.

Aspetto ancora un poco.

Non succede nulla: la chiavetta non lampeggia, in network-manager non la visualizza e la vedo solo come disco cdrom1 (e poi perché cavolo visualizzarla come cdrom se è solo una chiavetta USB?).

Per fortuna il web ti è amico. Così scopro che il dispositivo funziona già bene con il kernel e i driver Linux di wheezy (penso probabilmente anche quelli di squeeze seppure non abbia effettuato alcuna prova). L'unico problema è far effettuare il passaggio del dispositivo da periferica di massa a modem seriale. Però dai changelog si vede benissimo che il supporto è già stato inserito nel pacchetto usb-modeswitch/usb-modeswitch-data di sid.

Perfetto, installo usb-modeswitch >= 1.2.6 prelevandola da sid (al momento versione: 1.2.6+repack0-1) et voilà, tutto funziona!

A questo punto mi sorge una spontanea riflessione sui cavoloni della Onda Communication S.p.a.: vuoi supportare Linux perchè è cool e figo? Allora lavora alla maniera di Linux!

Perché cavolo crei un software che:

  • è totalmente proprietario (ma qui siamo nel regno della Free Software Foundation!);
  • probabilmente per larga parte ricorre a software libero;
  • non è necessario siccome il device è già supportato in Linux;
  • richiede la disabilitazione di programmi già installati sul sistema (sì, proprio vero, tra i requisiti chiede di fermare il network-manager).

Una persona sana di mente non avrebbe agito proprio così! Piuttosto avrebbe:

  • verificato quali software fossero già disponibili nel variegato panorama Linux;
  • avrebbe collaborato allo sviluppo del software necessario (usb-modeswitch in questo caso), o fornito le patch necessarie. Notare che a proposito qui stiamo discutendo di proprio 2 righe di codice;
  • avrebbe indicato i requisiti minimi del software necessario per usare il dispositivo (ossia la versione di usb-modeswitch, wvdial e network-manager);
  • al limite avrebbe creato come ultima spiaggia, dopo tutti i passi precedenti che non richiedono comunque un grosso sforzo, un programma che, senza bisogno di alcuna installazione sul sistema, possa permetterne l'utilizzo anche a quegli sfigati che non possano agire diversamente.

E così invece in rete si trovano miriadi di discussioni su come installare il software proprietario della Onda - molte spesso con target utente Ubuntu - che invece non serve a a una beata mazza, perché tutto funziona con il solito software libero!

Riguardo invece ai programmatori della ONDA penso che piuttosto che fare poco e male sia meglio non fare proprio nulla.

Mi dispiace solo che spesso vi sia l'andazzo alla W$, installiamo questo e quello, la licenza non importa, non so cosa faccia ma va bene così. Va bene così un cavolo, perché non dimentichiamoci che se abbiamo una così bella piattaforma e solo perché libera, perché tutti possono contribuire e metterci le mani.

Forse non sarà chiaro a molti utonti, ma uscire da questo sistema basato sulla collaborazione significa la fine stessa di questo magnifico universo.

Note su usb-modeswitch

Il codice da inviare è il seguente:

# Onda TM201 14.4 (TIM Italy)

TargetVendor = 0x1ee8
TargetProduct = 0x0064

MessageEndpoint = 0x01
MessageContent = "555342431849128600000000000008FF000000000000030000000000000000"
Fonte: www.draisberghof.de/usb_modeswitch/

Categorie: planet

Paese nel pallone. Vince il metodo STAMINA.

risca - Gio, 06/06/2013 - 23:47

Gioite compagni di disavventura, imbarcati in una nave sanza nocchiere in gran tempesta!, il metodo STAMINA alla fine l'ha spuntata. E l'ha spuntata a man bassa!

Non solo ha ottenuto un blebiscito alle camere (un solo contrario!) ma si porta a casa anche 3 milioni di "investimenti in ricerca" dal ministero della sanità. E per fortuna che avevamo in parlamento gente nuova, con un grillo per la testa, capace di fare la differenza. E per fortuna che abbiamo trasmissioni di inchiesta che sanno discernere tra il vero e la truffa. Macché, la TV è fatta solo di Iene che inseguono audience a scapido di insinuare false speranze a che vive nella disperazione più totale. Speranze a persona che già poter pensare ad un anno, un mese di vita potrebbe essere un miracolo.

Grazie anche a tutti gli allocchi che hanno creduto al complotto, alle lobby farmaceutiche e agli scienziati invidiosi. Ma che importa, tanto questi allocchi hanno le gambe per andare a protestare contro i mulini a vento!

Siccome la storia non insegna nulla, il faccendiere Davide Vannoni era già noto alle cronache. Non solo alle aule giudiziare e pm torinesi ma anche al pubblicoarticolo la stampa del 24/05/2011. Ma anche all'estero stanno ridendo di noi e della nostra capa cava: ben due articoli dedicati alla stupidità umanaitaliana da nature.

Ma non vi siete convinti e volete ancora credere al grande mago Vannoni? Perdete almeno ancora un attimo a leggere wikipedia o Le Scienze. Ridete ancora adesso?

Categorie: planet
Condividi contenuti