Newsgroup: it.comp.os.dibattiti
Titolo: Da Slashdot su .Net

http://slashdot.org/article.pl?sid=03/05/20/1640225
"In the .NET Framework, it's possible to access a private member of any
class -- your own, another developer's, or even the classes in the .NET
Framework itself! Appleman demonstrates this with a great example that uses
private members to get the list of groups that the current user is a member
of -- in a single line of code -- by accessing a private member that is not
exposed by the .NET Framework"

 ha scritto nel messaggio
news:zn%ya.64352$DN.15...@tornado.fastwebnet.it...
Tanto per chiarire: l'ho postata solo perché mi sembrava interessante, le
opinioni dell'autore non sono necessariamente le mie :-)


Un paio di commenti significativi da Slashdot:
"This is no security hole. If you're able to run code on the target 
machine then you can do pretty much anything you want (or can) already.
ust because you can find out some "inner state" of an object doesn't
mean that you're God now.
Oh, and the same "exploit" can be done with C++ - does this have a 
negative affect on security? No.
Encapsulation was never meant to be a security feature."
"This whole story is hilarious. All (decent) languages let you hide
implementation details from the end user. Finding them isn't `hacking`
- its `stupid` as it means that if a chunk of code is changed to use,
say, a doubly linked list rather than an array, your code would break,
whereas it wouldn't if you accessed only the public methods/variables.
This `exploit` is laughable, pointless and ultimately going to waste
your time. The sort of coders who could use it would have the skill to
figure it out in the first place anyway."
-- 
"Everything is vague to a degree you do not realize till you have tried
  to make it precise"
                                       Bertrand Russell
                                       The Philosophy of Logical Atomism

 snip >
In effetti è esilarante.
Chi ha scritto la storia è sicuramente un programmatore eccezionalmente
mediocre, ma almeno ha fegato... :)
Ciao,
	Nicholas

 exposed by the .NET Framework"
Cosě io posso far sfanculare il codice di qualunque idiota! Ecco lo 
scopo! ;) Qualcosa del tipo
int fundamentalPrivateMember;
|
v
int* fundamentalPrivateMember;
andrebbe benissimo.



ROTFL!
Ma chi è questo fenomeno? Con queste cazzate gli concedo al massimo un
quarto d'ora di esperienza in programmazione, se ha un minuto di più è
un cretino.
Da quando le variabili private sono inaccessibili? In C++ si può accedere
alle variabili private rispettando tranquillamente la semantica (oltre che
giocare coi puntatori, ovvio). Mi piacerebbe sapere cosa vuole
dimostrare... sicurezza? L'unica speranza di sicurezza è che lui non
programmi...
 

 opinioni dell'autore non sono necessariamente le mie :-)
Il problema non è l'opinione... è la sostanza, purtroppo... :-)

 scopo! ;) Qualcosa del tipo
No, qualcosa del tipo (ah, non importa avere dotnet, lo puoi compilare
nella tua linuxbox):
#include <stdio.h>
 
class Segretissima {
public:
Segretissima() {
 
	password = "secret";
}
private:
      char * password;
};
 
class QuantoSonoHacker
{
 
	public:
      	char * pubblica;
};
 
int main()
{
	Segretissima * obj1 = new Segretissima();
	QuantoSonoHacker *obj2 = (QuantoSonoHacker *) obj1;
	printf("%s\n", obj2->pubblica);
        return 0;
}

implementation details from the end user. Finding them isn't `hacking`
Ne' Smalltalk ne' Rebol hanno membri privati, ma mi pare siano
linguaggi decenti :P

Io intendevo far sfanculare qualcosa cambiando una caccola... da int a 
pointer lasciando lo stesso nome. ``Come non far funzionare un 
paradigma'', M$-Editions, Paperback, ed. 2003, $99.99

 Certo che esistono le variabili private. Basta sapere cosa sono. Pensi che abbia a che fare con la sicurezza?
Che c'entra la sicurezza nella visibilità di una variabile? (forse 
scherzavi, ma non l'ho capito)

linguaggi decenti :P
e molti linguaggi li hanno ma non sono irraggiungibili (se esiste una
reflection decente..)

 andrebbe benissimo.
Scusa ma... che cazzo di baco č ? :p
In qualsiasi linguaggio puoi sfanculare il codice di qualunque idiota.
Ciao,
	Nicholas

 linguaggi decenti :P
Rebol ? Lo usi ? Com'è ?
Ciao,
	Nicholas

 paradigma'', M$-Editions, Paperback, ed. 2003, $99.99
Ti ho fatto io l'esempio di come non far funzionare un paradigma.

 wrote in message
news:pA%ya.64376$DN.15...@tornado.fastwebnet.it...

Forse chi ha postato l'articolo su Slashdot non ha capito di cosa si
tratta....
Saluti.



Lo sto usando in alcuni progetti commerciali con piena soddisfazione,
mi ha fatto risparmiare molto tempo rispetto al VB (e con l'indubbio
vantaggio di essere multipiattaforma da QNX a BeOS, passando per
Solaris e Amiga).
Come linguaggio e' molto compatto, in poche linee di codice si puo'
fare di tutto. Ad esempio il seguente codice:
repeat n 100 [if not error? try [close open join tcp://address: n]
[print [n "is open"]]]
e' un port-scanner sulle prime 100 porte (e' uno dei tanti esempi
tratti dal sito 
www.rebol.com
 nella sezione "one-liners").
Mi piacerebbe confrontarlo con l'equivalente in VB, delphi, Python
ecc..
Nei 500 Kb dell'interprete c'e' tutto quello di cui si ha bisogno,
compresa una libreria grafica con vari widget.
Una maschera con un pulsante che mostra un messaggio puo' essere
codificato come:
view layout [button red "messaggio" [alert "Hello world"]]
Non è pero' esente da difetti:
- Manca di un debugger, cosa che alle volte si rivelerebbe utile,
anche se devo ammettere che, essendo lo sviluppo sotto Rebol diverso
da altri linguaggi, non è cosi' necessario come sembrerebbe a prima
vista.
- Pur essendo nelle versioni Base, Core, View gratuito senza alcuna
royalty, non è open source.
Ma a parte la mia confusa descrizione, ti consiglio di scaricare un
po' di documentazione dal sito, ti farai un'idea migliore.
Ciao
Davide

 programma. 
Leggi bene: il mio codice in una libreria --> ho sputtanato un 
programma, o meglio il programmatore si è sputtanato con le sue mani.

 [print [n "is open"]]]
Peggio del Perl.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://digilander.libero.it/ebassi/
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 programma, o meglio il programmatore si č sputtanato con le sue mani.
Non so perchč, ma ho avuto la sensazione che quell'articolo sia stato
preso sul serio da qualcuno.

 preso sul serio da qualcuno.
??? Non comprendo



Non scherzavo. E non chiederlo a me... 
"The fact that private in .NET isn't really private is something that
isn't well known, and even if you're not interested in security, this
e-book is worth a read just to get some insight into what you can do with
the .NET framework, and what other people might someday try to do to your
code."

 isn't well known, and even if you're not interested in security, this
Mettila cosě... magari la sicurezza č per loro come evitare dei buffer 
overflow... chi lo sa!

Ciao,
No, non lasciarti ingannare dall'esempio che ho riportato, in realtà
Rebol non è criptico. Prendere mano a codice scritto da altri spesso è
piu' semplice di quanto non accada per altri linguaggi.

ecc..
tentativo al volo in ruby:
n.times {|x| puts x if (TCPSocket.new (Addr,x) rescue false)  }
peccato che gli one liner diano sempre l'idea di un linguaggio
casinista...
PS
quella linea è programmata puramente ad oggetti anche se nn
sembrerebbe :)

 overflow... chi lo sa!
No, rileggilo che non č cosě.
(anche questa sarebbe una teoria esilarante, comunque)
 

 reflection decente..)
Altri linguaggi consentono l'accesso diretto alla memoria; siccome non
esiste riservare l'accesso alla memoria per singolo oggetto (almeno nei
sistemi che conosco io) non esiste nulla di irraggiungibile. Sembra un
discorso poco attinente visto che si parla di linguaggi di un certo
livello, ma siccome l'autore dell'articolo crede di aver avuto
l'intuizione geniale di scoprire un security hole[1] è bene chiarire che
la parola chiave "private" è una regola di design e non garantisce nulla
(sia che il linguaggio fornisca gli strumenti sia che non gli fornisca)[2]
[1] l'autore farebbe la sua dimostrazione su una classe ad hoc che
implementa il management di una win file ACL e parla di membri
"private" che vorrebbe nascondere al resto del programma (a parte che
l'istanza della classe verrebbe eseguita con gli stessi privilegi del
resto del programma, non è che eseguendo un metodo privato faccia qualcosa
di più di quanto gli è concesso, comunque...).
[2] ad un certo punto dice: "This is a piece of functionality that is not
included with the .NET Framework". Non si è chiesto come mai? <g>

 tentativo al volo in ruby:
bello il ruby... e' un anno che mi riprometto di guardarlo in maniera piu'
approfondita.
tu lo usi? per che tipo di cose?
ciao!


ha scritto::

ci gioco :) 
intendo dire che nn ci faccio nulla di serio, ci ho fatto un 
microclient (open)nap, il solito ircbot che fanno tutti in qualsiasi
linguaggio, e adesso sto vedendo come funzionano le cgi scrivendo una
specie di blog.
Cmq, 
<plug type=shameless>
č nato da poco il ruby user group Italia..
http://ada2.unipv.it/ruby
</plug>

 privilegi del resto del programma, [...]
mi sembra di aver capito che, comunque, il trucco funziona solo con del 
codice untrusted a metterlo in atto
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!

 un cretino.
Dan Appleman č... beh, facciamo cosě:
http://www.google.it/search?q=Dan+Appleman
http://groups.google.com/groups?q=Dan+Appleman
http://www.emu.edu.tr/english/facilitiesservices/computercenter/bookslib/Dan%20Appleman's%20Developing%20ActiveX%20Components%20With%20VBasic5
Proprio un cretino non č... in questo caso specifico non mi pronuncio,
non ho ancora letto bene (e capito :-) ) tutta la faccenda.
Bye, G.

 
http://ada2.unipv.it/ruby
grazie. adesso ci do un'occhiata.