È possibile evitare l'iniezione SQL non utilizzando un linguaggio di interrogazione per la maggior parte delle attività? [duplicare]

1

Sto arrivando a questo da un punto di vista un po 'principiante, quindi se questa è una domanda ovvia è perché non conoscevo i termini giusti da cercare. Esistono DBMS che forniscono un'interfaccia alternativa (ad esempio un'API) al solito prompt di testo della lingua di query, che è meno flessibile e meno potente per operazioni semplici? Idealmente qualsiasi attività che coinvolgesse l'input dell'utente sarebbe gestita con una combinazione di semplici query tramite questa API e logica nel linguaggio di programmazione. SQL o un altro linguaggio di interrogazione sarebbero riservati sia agli utenti umani che a particolari query quasi statiche che non incorporavano l'input dell'utente.

Architettonicamente la mancanza di un flusso di testo probabilmente rimuoverà la semplice trasparenza della rete, richiedendo un "server" locale che agisce come invio al server reale sulla rete.

Come ho detto, al momento sono un principiante in tutto questo, ma questa sembra una decisione progettuale così ovvia che sospetto che esista già (forse ovunque), o che sia praticamente impossibile in pratica. Sarebbe bello sapere perché.

Aggiunto più tardi: Per chiarire l'intento è di accedere al database senza utilizzare la riflessione da qualche parte. Idealmente, tutte le possibili posizioni di riflessione sull'input dell'utente potrebbero essere escluse, incluso qualsiasi utilizzo della shell di sistema. SQL è solo il punto di partenza, ma sotto questa logica Shellshock è considerato lo stesso tipo di vulnerabilità di SQL injection.

    
posta davolfman 16.02.2015 - 21:25
fonte

2 risposte

3

Sebbene si possano evitare attacchi di "SQL injection" non usando un database relazionale o non usando SQL per interrogarne uno, essi fanno davvero parte di una gamma più ampia di attacchi di input dell'utente non attendibili che devono essere protetti. Anche se disponi di un archivio di chiavi / valori NoSQL, potresti comunque essere vulnerabile a un utente malintenzionato che cancella tutti i dati nel tuo negozio.

La lezione dietro l'avvertimento contro gli attacchi SQL injection è in realtà non eseguire direttamente l'input dell'utente, ma per sanitizzarlo in qualche modo.

    
risposta data 16.02.2015 - 22:14
fonte
0

Non sono sicuro al 100% di ciò che stai chiedendo, ma ci sto pensando che tu debba sempre programmare le stringhe SQL per interrogare un database? In tal caso, a seconda della lingua con cui si sta lavorando, utilizzando C # è possibile scrivere istruzioni LINQ (query integrata Language) link .

Quindi puoi scrivere un codice come

 var queryLondonCustomers = from cust in customers
                       where cust.City == "London" 
                       select cust;

Ricorda che questo sarà ancora tradotto in SQL per il database, è solo un livello sopra SQL per il programmatore.

    
risposta data 16.02.2015 - 21:31
fonte

Leggi altre domande sui tag