Can javascript search through my files from desktop and send them to attacker?
Storicamente, sì , i browser hanno trattato lo schema file:
come un'unica origine e l'attacco che descrivi sarebbe stato possibile.
Ma oggi no, Chrome e Firefox applicano criteri di origine identica che limitano l'accesso tra file locali. Tuttavia, Microsoft Edge non limita l'accesso in lettura tra i file locali, come ha notato @dandavis.
Cioè, quando apri un file HTML a file:///downloads/malicious.html
in uno di questi browser, uno script in quel documento può non cercare liberamente nel file system e inviare file sensibili domestici. Tuttavia, il modo esatto in cui vengono implementate le SOP nello schema file:
varia tra i browser e non è molto ben documentato - e non sembra esserci uno standard stabilito per questo.
Mozilla presenta alcuni dettagli (potenzialmente obsoleti) documentati qui :
Starting in Gecko 1.9 [Mozilla's browser engine], files are allowed to read only certain other files. Specifically, a file can read another file only if the parent directory of the originating file is an ancestor directory of the target file. Directories cannot be loaded this way, however.
For example, if you have a file foo.html
which accesses another file bar.html
and you have navigated to it from the file index.html
, the load will succeed only if bar.html
is either in the same directory as index.html
or in a directory contained within the same directory as index.html
.
Non sono riuscito a trovare alcuna documentazione pertinente per Chrome, ma l'accesso tra file sembra essere completamente bloccato. Ad esempio, Chrome non mi ha consentito di emettere una richiesta di origine incrociata per un URI file:
:
Failed to load file:///tmp/malicious.html
: Cross origin requests are only supported for protocol schemes: http
, data
, chrome
, chrome-extension
, https
.
Anche provando ad avere un file:
di accesso al documento del DOM di un iframe con lo stesso URI fallito:
Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.
Detto questo, aprire localmente file HTML non attendibili è ancora più pericoloso che caricarli da un sito web. Anche se potrebbero non essere in grado di leggere tutti i file locali, potrebbero comunque utilizzare attacchi come XSSI ( inclusione di script tra siti ) per rendere potenzialmente vulnerabili le informazioni su altri file locali.