Ho visto in un commento che l'utilizzo di __func__
è un rischio per la sicurezza. Devo capire come va il caso?In che modo l'identificatore __func__ è un rischio per la sicurezza?
risposta
L'utilizzo di __func__
rivela il nome della funzione nel file binario, che facilita il lavoro di un utente malintenzionato che ha accesso al file binario.
Rende più semplice il reverse engineering. Quindi, se vuoi mantenere il modo in cui la tua applicazione funziona in modo segreto, rende più facile la vita di un utente malintenzionato.
Questo è rilevante per le funzionalità DRM o se si desidera rendere più difficile l'imitazione degli algoritmi nelle applicazioni concorrenti.
Ma ciò non influisce sulla sicurezza, in quanto un'applicazione in cui l'inversione mostra le vulnerabilità era insicura in primo luogo.
Se la sicurezza dell'applicazione si basa sul fatto che i suoi nomi delle funzioni rimangono segreti, è un rischio per la sicurezza utilizzare __func__
, poiché il compilatore dovrà memorizzare il nome della funzione da qualche parte nel binario compilato.
__func__
è l'identificatore predefinito standard C99 che si espande in una variabile di matrice di caratteri contenente il nome della funzione quando viene utilizzata all'interno di una funzione. Da C99 6.4.2.2/1 descrive:
L'identificatore
__func__
è implicitamente dichiarata dal traduttore come se, subito dopo la parentesi di ogni definizione di funzione apertura, la dichiarazionestatico const char
__func__
[ ] = "nome-funzione"; è apparso, dove nome-funzione è il nome della funzione di inclusione lessicale. Questo nome è il nome disadorno della funzione.
Si noti che non è una macro e non ha alcun significato speciale durante la preelaborazione.
un'occhiata a questo link per maggiori informazioni sulla __func__
a:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1642.html
Se la soluzione si basa sull'espansione coinvolto nel predefinito costante __func__
sensibile al contesto, non può essere implementato in una funzione in modo sicuro e fornire la stessa convenienza.
__func__
viene espanso testualmente al momento della sua invocazione, quindi, potrebbe facilmente influire sul flusso di controllo del codice di richiamo valutando le istruzioni break, continue o return o non riuscendo a terminare correttamente le istruzioni. Gli effetti di invocarlo possono essere sorprendenti e portare a sottili difetti.
Preferiscono funzioni statiche o in linea a macro funzioni o __func__
.
Tuttavia, nei casi in cui la definizione di __func__
è inevitabile, la definizione deve evitare istruzioni che modificano il flusso di controllo del codice di richiamo. Idealmente, dovrebbe essere un'espressione singola.
idea più e codici di esempio:
https://www.securecoding.cert.org/confluence/display/seccode/PRE13-C.+Avoid+changing+control+flow+in+macro+definitions
Non sei sicuro di come questo risponda alla domanda, che riguarda specificamente i rischi _security_ e non l'operazione/implementazione generale di '__func__'. –
Ho provato a rendere l'uso di '__func__' più comprensibile e il fatto che non sia una' macro' come OP dice nella domanda. "Gli effetti di invocarlo possono essere sorprendenti e portare a sottili difetti". e i collegamenti dati nella risposta puntano molto bene su come può causare altri moduli dipendenti a comportarsi in modo imprevedibile e quindi meno sicuro. – askmish
- 1. Come fare in modo che le ottimizzazioni del compilatore non introducano un rischio per la sicurezza?
- 2. Qual è il rischio per la sicurezza della riflessione dell'oggetto?
- 3. Esiste un rischio per la sicurezza che esegue app web in debug = "true"?
- 4. Rischio sicurezza di abilitazione MSDTC
- 5. La disabilitazione dell'accesso anonimo in IIS crea un rischio per la sicurezza?
- 6. Quanto è grande il rischio per la sicurezza le estensioni del browser?
- 7. Perché la convalida lato client rappresenta un rischio per la sicurezza rispetto alla convalida lato server?
- 8. Mostrare il messaggio di eccezione PHP potrebbe essere un rischio per la sicurezza?
- 9. I messaggi di eccezione/errore dettagliati rappresentano un rischio per la sicurezza?
- 10. Come dire a IE un file HTML sul mio disco non è un rischio per la sicurezza?
- 11. Che cosa sono gli "array JSON di livello superiore" e perché rappresentano un rischio per la sicurezza?
- 12. In che modo SAML fornisce realmente sicurezza?
- 13. In che modo la stringa Java è immutabile e aumenta la sicurezza?
- 14. Sicurezza di primavera: in che modo la sicurezza di Spring registra una nuova sessione in SessionRegistry?
- 15. Equivalente di __func__ (da C) in Python
- 16. Che rischio rappresenta Reflection? (Medium Trust)
- 17. Esiste un rischio per la sicurezza se installiamo il certificato SSL sul sistema di bilanciamento del carico anziché sui server?
- 18. Qualche rischio in un wrapper AutoCloseable per java.util.concurrent.locks.Lock?
- 19. Equivalente di __func__ o __FUNCTION__ in Rust?
- 20. In che modo la resa è enumerabile?
- 21. Che cosa è un modo infallibile per impostare in modo permanente la directory di lavoro R?
- 22. In che modo breeze.js gestisce la sicurezza ed evita di esporre la logica aziendale
- 23. Che cos'è la sicurezza del tipo?
- 24. Moduli del kernel Linux - Rischi per la sicurezza?
- 25. In che modo thread-safe è V4L2?
- 26. Aggiornamenti automatici: che cos'è la sicurezza "adeguata"?
- 27. vulnerabilies Checklist per la sicurezza
- 28. Spring Security OAuth2, che decide la sicurezza?
- 29. phpMyAdmin pone rischi per la sicurezza sulla produzione
- 30. In che modo Perl sa che un file è binario?
dove l'hai visto? – 0x90
Risposta breve: qualcuno ha scritto qualcosa di stupido in un commento. Succede al meglio di noi. – Jens