È sicuro riportare i nomi delle colonne delle tabelle in ajax?

2

Ho una tabella come ...

THINGS_TABLE
============
thing_key           int              PRIMARY KEY
thing_num           varchar(20)
thing_title         varchar(20)
thing_description   varchar(20)

E alcune funzioni di ColdFusion (codice lato server) che possono aggiungere, modificare ed eliminare da questa tabella. Ad esempio una funzione createThing potrebbe apparire come questa in ColdFusion. I i parametri di cfqueryparam nella cfquery dovrebbero impedire l'iniezione SQL , quindi Non credo che l'iniezione SQL sia qualcosa di cui devo preoccuparmi.

<cffunction name="createThing" access="remote" returntype="void">
    <cfargument name="thing_num" type="string" required="yes">
    <cfargument name="thing_title" type="string" required="yes">
    <cfargument name="thing_description" type="string" required="yes">

    <!--- write to db --->
    <cfquery name="createThingQuery" datasource="my_datasource">
        INSERT INTO THINGS_TABLE (thing_num, thing_title, thing_description) values (   
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_num#'>,
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_title#'>,
        <cfqueryparam cfsqltype="cf_sql_varchar" value='#thing_description#'>)
    </cfquery>
</cffunction>

È sicuro rivelare i nomi effettivi delle colonne nelle chiamate ajax che eseguono il codice lato server? Ad esempio, una chiamata Ajax che potrebbe apparire come questa:

$.ajax({
    type: "POST",   
    url: "thingFunctions.cfc",
    data: { method : "createThing",
            thing_num : "the number",
            thing_title : "the title",
            thing_description : "the description"
            }})

Questo ajax rende davvero ovvio quali siano i nomi effettivi delle colonne nel database, ed è certamente possibile che la mia funzione ColdFusion usi nomi di argomenti diversi, ma esiste davvero qualche vantaggio nell'usare nomi diversi? A me sembra che potrebbe solo rendere il codice più confuso per uno sviluppatore da leggere, senza fornire alcun vantaggio dal punto di vista della sicurezza.

Inoltre, forse ci sono altri problemi nell'usare chiamate ajax come questa a cui non sto pensando? Cioè un utente potrebbe forse modificare la pagina JavaScript e chiamare il mio codice ColdFusion in modi in cui non era originariamente previsto?

    
posta Ectropy 25.03.2016 - 18:44
fonte

2 risposte

1

Non fornire una mappatura diretta ai nomi delle colonne è offuscamento. La sicurezza attraverso l'offuscamento non dovrebbe essere invocata, ma fa aiutare, anche se solo un po '. Come si fa notare, però, la domanda è se il compromesso nell'oscurare questi nomi valga l'onere di manutenzione extra. Questa è una questione di opinione, ma io tendo a dire che non lo è - anche da una prospettiva strettamente di sicurezza, il codice più ovvio è il codice che ha meno probabilità di avere problemi di sicurezza.

Also, perhaps there are other issues with using ajax calls like this that I'm not thinking of? I.e. a user maybe could edit the page JavaScript and call my ColdFusion code in ways it wasn't originally intended?

Un utente malintenzionato può sempre modificare qualsiasi cosa sul proprio client. Questo è un punto fondamentale per la sicurezza web.

Non conosco abbastanza ColdFusion per capire veramente cosa sta succedendo nel tuo esempio, ma sembra che un utente malintenzionato possa semplicemente inserire i valori in un endpoint per creare nuove righe nella tabella. Dovrebbero essere in grado di farlo solo determinati tipi di utenti? Se è così, è meglio mettere un po 'di autorizzazione e autenticazione sull'endpoint. Ci saranno problemi se la tabella diventa veramente grande? Applica limiti di velocità per utente e per IP e crea un avviso quando la tabella raggiunge livelli di avvertimento e critici.

    
risposta data 25.03.2016 - 18:53
fonte
2

Sono d'accordo con Xiong che l'offuscamento dei nomi delle colonne delle tabelle rende il codice più complicato e più difficile da capire. Se lo fai con ogni tabella, potresti confondere gli altri sviluppatori (o te stesso, guardando il codice un anno dopo).

(Presumo che il tuo database non sia direttamente raggiungibile da Internet, ma solo attraverso il tuo back-end. Se lo è, dovresti rivedere la tua architettura.)

Also, perhaps there are other issues with using ajax calls like this that I'm not thinking of? I.e. a user maybe could edit the page JavaScript and call my ColdFusion code in ways it wasn't originally intended?

Siate sempre preparati che la vostra API potrebbe non solo essere chiamata dalla vostra pagina web, ma anche da uno sviluppatore curioso, provandolo per divertimento, dopo aver guardato il codice JavaScript o il traffico HTTP:

  • Devi sempre convalidare i dati dell'utente prima di persistere. Altrimenti potresti finire per correggere i dati che causano eccezioni da qualche parte nel tuo back-end (ad esempio, provando ad analizzare una stringa come data, ma con un valore di stringa di garbage).
  • Se la tua rotta API causa l'aggiunta di righe del database, probabilmente dovrebbe essere disponibile solo per gli utenti autenticati.
risposta data 25.03.2016 - 20:04
fonte

Leggi altre domande sui tag