Ultime Notizie
News
Protezione del software
- Details
- Created: Saturday, 07 July 2018 12:10
In questo ciclo di 2 articoli affronterò le 2 modalità di protezione del software utilizzabili ( hardware e software ) , cercando di analizzarne pregi e difetti.
Parlerò di 2 prodotti particolari ( facendo presente anche i motivi per cui ne ho scartati altri, dopo averli valutati )
Nei miei prodotti li utilizzo entrambi, perchè, come spesso succede, i pro ed i contro sono anche il gradimento dei clienti e la loro modalità di utilizzo del prodotto, per cui ci possono essere degli impedimenti all'utilizzo di una delle 2 soluzioni o magari qualche preconcetto che fanno sì che una delle 2 non sia gradita ( magari qualche esperienza pregressa non positiva, come spesso accade, ma spesso si tratta di cattive implementazioni e non di veri e propri problemi )
Un software è generalmente composto da più features, che possono essere installate ( e licenziate ) separatamente ; in genere un prodotto software consiste di una main feature ( il core del prodotto ), e di una serie di features accessorie ; in un programma di setup ( cfr: https://docs.microsoft.com/it-it/windows/desktop/Msi/feature-table ) sono spesso disponibili separatamente per l'installazione
Le chiavette USB (modalità hardware)
Questa è sicuramente la soluzione più vecchia presente sul mercato ; prima di USB , si usavano magari chiavi che si connettevano alla porta parallela.
Le chiavette non richiedono drivers e vengono quindi viste senza problema dai moderni sistemi operativi.
Le chiavette possono essere programmate per aggiungere dei dati al suo interno ( leggibili dall'applicazione ), e anche fare dei calcoli di verifica ; è anche possibile scrivere dei dati sulla chiave, in zone diverse (una accessibile solo al programmatore della chiave, l'altra ad uso dell'applicazione e che si può ad esempio utilizzare per salvare la data di primo utilizzo , o altro , dando quindi la possibilità di implementare qualsiasi funzionalità richiesta da un prodotto di gestione licenze )
Una possibile implementazione potrebbe essere quella di abilitare la main feature se la chiavetta USB è presente, mentre si può scrivere l'elenco delle features attivate in un frammento XML, in maniera tale che da applicazione si può verificare l'attivazione di una particolare feature andando a processare questo frammento XML ; per la limitata capacità di questa zona di memoria è comunque consigliabile usare un formato più breve ( ad esempio, un elenco separato da virgole )
Da notare che per la scrittura di questa zona di memoria sono richieste chiavi aggiuntive rispetto a quelle richieste per la lettura , quindi l'utilizzatore finale non sarà in genere abilitato a modificarle ; nondimeno, possiamo realizzare dei piccoli software da inviare la cliente e tramite i quali riscrivere questa zona ( per abilitare nuove features, ad esempio , o comunque variare le licenze )
Per le versioni di prova , è possibile scrivere la data di primo utilizzo e/o il numero di utilizzi , tramite il quale limitare l'utilizzo del prodotto ; da notare che comunque l'attivazione di una versione di prova richiede una chiave hardware ( che ha un costo, se acquistata da un fornitore , di circa 50 euro , e poi comunque è problematico distribuirle a chiunque )
Un vantaggio di questa soluzione è che funziona ( bene ) anche su macchine virtuali ; mentre vedremo che una soluzione software , pur potendo funzionare anche in ambiente virtuale , in realtà funzionando in questo modo la protezione può essere aggirata, e quindi in genere per un ambiente virtuale si sconsiglia l'implementazione di una protezione software e l'unica soluzione praticabile è quella hardware
Una chiavetta USB può anche essere prodotta in casa con una scheda arduino ( presenterò in seguito un progetto per una protezione USB basata su Arduino )
Questa è la chiavetta USB che ho di norma utilizzato : https://rockey.it/rockey2/
Dns dinamico con godaddy
- Details
- Created: Thursday, 05 July 2018 00:02
In questo articolo mostrerò come realizzare un dns dinamico tramite uno script python e le api sviluppatore di godaddy su un server macOS
Il servizio di ip dinamico viene offerto a pagamento da vari fornitori , es : https://dyndns.it , spesso viene offerta una sorta di demo gratuita che però ha varie limitazioni; il servizio serve ad accedere ad un server a casa , in cui viene utilizzato un provider che non offre un servizio di ip fisso , tramite nome dns ; l'utilizzo dei dns di godaddy non ha limitazioni , è molto più efficiente, ed è anche gratuito ( il che non guasta )
lo script python originale e stato scaricato da qui :
https://github.com/CarlEdman/godaddy-ddns
dovrebbe supportare sia versione 2.7 che 3 di python, in realtà su macOS non andava per cui ho utilizzato le librerie requests in luogo della Request utilizzate nell'esempio;
per installare requests, va prima installato pip , e poi si utilizza pip per installare il resto ( entrambe le operazioni vanno fatte con proivilegio di root )
>easy_install pip
>pip install requests
Nel dettaglio, queste sono le modifiche apportate allo script python :
#if sys.version_info > (3,):
# from urllib.request import urlopen, Request
# from urllib.error import URLError, HTTPError
#else:
# from urllib2 import urlopen, Request
# from urllib2 import URLError, HTTPError
import requests
from urllib2 import URLError, HTTPError
...
questa è la parte che determina l'ip da assegnare poi al record dns :
req = requests.get("http://ipv4.icanhazip.com/")
args.ip = req.content.strip()
e questa è la parte che richiama l'api di godaddy per cambiare il record dns :
url = 'https://api.godaddy.com/v1/domains/{}/records/A/{}'.format('.'.join(hostnames[1:]),hostnames[0])
data = json.dumps([ { "data": args.ip, "ttl": args.ttl, "name": hostnames[0], "type": "A" } ])
if sys.version_info > (3,): data = data.encode('utf-8')
headers = {"content-type": "application/json", "Authorization": "sso-key {}:{}".format(args.key,args.secret),
"Accept":"application/json" }
req = requests.put(url, data=data, headers=headers)
per richiamare l'api di godaddy è necessaria una KEY e un SECRET , per ottenere i quali bisogna registrarsi come sviluppatore su :
developer.godaddy.com
per richiamare lo script python ho utilizzato un semplice script di una riga in bash :
python /Users/alessandrotrebbi/Desktop/godaddy-ddns/godaddy_ddns.py --key 9QC......Nue --secret 8V....1Hi --ttl 600 $HOSTNAME.3bsoft.com
( modifico il record $HOSTNAME , nello specifico aleforever , del dominio 3bsoft.com ; provatelo anche manualmente per verificare di avere installato correttamente la libreria requests di python )
questo script l'ho schedulato per richiamarlo ogni 10 minuti , per fare questo in macos si utilizza un file plist da copiare in una specifica directory ( ce ne sono diverse ), in particolare ho utilizzato la directory :
/Library/LaunchDaemons
perchè il job dovrà funzionare anche ad utente non loggato
attenzione al nome del plist ( per evitare conflitti , scegliere un nome con namespace , es : com.bbbsoft.godaddy-ddns.plist
usare poi full path per ProgramArguments , StandardErrorPath e StandardOutPath
)
Alla fine , attivare ed avviare il servizio con :
launchctl load com.bbbsoft.godaddy-ddns.plist
( il comando unload serve invece per disattivarlo , in questo caso va dato però il full path del plist )
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.bbbsoft.godaddy-ddns</string>
<key>ProgramArguments</key>
<array>
<string>/Users/alessandrotrebbi/Desktop/godaddy-ddns/mydns.sh</string>
</array>
<key>Nice</key>
<integer>1</integer>
<key>StartInterval</key>
<integer>3600</integer>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/alessandrotrebbi/Desktop/godaddy-ddns/mydns.err</string>
<key>StandardOutPath</key>
<string>//Users/alessandrotrebbi/Desktop/godaddy-ddns/mydns.out</string>
</dict>
</plist>
Video demo Oil And Gas Pipeline Design
- Details
- Created: Monday, 25 June 2018 13:52
Nel video seguente, i passaggi per stampare le tavole di un progetto di pipeline partendo da un file excel
Java a pagamento
- Details
- Created: Wednesday, 06 June 2018 08:45
E così, dal 2019 le aziende che vorranno usare gratis java dovranno pagare :
https://java.com/it/download/release_notice.jsp
potrete continuare ad usarlo liberamente se non a scopo di lucro, potrete usarlo come sviluppatore ; ma se vorrete usarlo in una azienda, le nuove versioni dovrete pagarle ( quanto non è dato saperlo ); quelle rilasciate da gennaio 2019
Oracle passerà ad un modello di licenze lts ( long term support ), per cui da qui a java 11 ( prevista tra 3 anni ) l'unica versione su cui continueranno a correggere bug e fare patch sarà java 8 , ma le patch non saranno accessibili a tutti
Potrebbe essere l'ennesimo tentativo di Oracle di affossare java , che dall'acquisto di Sun ha mostrato di mal digerire ( anche se alla fine gli ha reso parecchio , solo di royalties e cause legali vinte ha già incassato più di quanto apgato a suo tempo per Sun, e l'acquisto era stato fatto per acquisire Solaris, senza alcun interesse in Java ; Solaris nel frattempo è stato abbandonato, Oracle si è sviluppato la sua ( ottima ) distribuzione Linux
Il legame di Oracle con Java è sempre stato bipolare :
Con Oracle 8 Java fu introdotto nel dbms di Oracle , sembrava che di lì a poco avrebbe soppiantato plsql : Oracle, con IBM e Sun , al tempo era anche una delle aziende che aveva avviato un programma di certificazione per Java ... Poi, in silenzio, il programma di certificazione sparì dal sito di Oracle ( e non solo ), Java sul dbms Oracle non fu più aggiornato ( ed oggi, se proprio lo si vuole usare , bisogna utilizzare Java 1.3 , ormai obsoleta , e fare praticamente tutto in maniera manuale , di fatto viene mantenuta per quei pochi clienti che al tempo provarono ad usarlo e far funzionare ancora il software a suo tempo realizzato )
Concludendo, direi che è il momento buono di cercare serie alternative a Java ; ormai , i vantaggi sono rimasti pochi ( anche .net è multipiattaforma ), svantaggi invece sono tanti, ed a questi si aggiunge anche un costo che presumo non sarà da poco ( Oracle da questo punto di vista non scherza )