Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    391

    [MariaDB] Inserire record con condizione in query

    Ciao,
    attualmente ho questa query sql
    codice:
    INSERT INTO SecureBan (SBanIP, SBanErr) VALUES ('192.168.1.1', 1) ON DUPLICATE KEY UPDATE SBanErr = SBanErr + 1
    per inserire un ip (SBanIP) in una tabella e incremento il valore SBanErr tutte le volte che intercetto un sql injection, dopo che il valore SBanErr e' maggiore di 3 lo blocco in modo da non farlo accedere ad un mio sito web.

    SBanErr e' un campo smallint (0 - 65535), facendo delle prove con sqlmap per cercare delle vulnerabilità questo valore raggiunge in fretta il limite 65535 e mi restituisce errore.

    E' possibile fare un controllo se SbanErr e' <= 65535 nella query stessa e fare in modo di non eseguire l'insert/update? volevo capire se e' possibile evitare l'uso di un recordset per fare questa verifica.
    Da un grande potere derivano grandi responsabilità

  2. #2
    1. il controllo non lo puoi fare PRIMA di eseguire la INSERT?
    2. che linguaggio usi?
    3. non puoi cambiare il tipo di colonna?

  3. #3
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    391
    1 - si posso farlo prima, ma ho letto che si poteva fare e volevo capire come farlo ma non ci sono riuscito
    2 - classic asp
    3 - si per ora ho aumentato il tipo di dato pero' non mi sembrava una soluzione fatta bene, prima o poi potrebbe comunque arrivare a quel limite

    se non e' possibile faro' il controllo prima, ma era anche un occasione per imparare qualcosa di utile e nuovo

    grazie optime
    Da un grande potere derivano grandi responsabilità

  4. #4

  5. #5
    poi facce sape', è interessante

  6. #6
    forse un errore di battitura

    Quote Originariamente inviata da abellos Visualizza il messaggio
    E' possibile fare un controllo se SbanErr e' <= 65535 nella query stessa e fare in modo di non eseguire l'insert/update?
    se SBanErr<=65535 l'aggiornamento va fatto

  7. #7
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    391
    Grazie della dritta, ho fatto cosi
    codice:
    SecureSQL=" INSERT INTO SecureBan (SBanIP, SBanErr) "& _ 
    " VALUES ('" & Request.ServerVariables("REMOTE_HOST") & "', 1) "& _
    " ON DUPLICATE KEY UPDATE SBanErr = IF( VALUE(SBanErr) <= 10 , VALUE(SBanErr) + 1 , 33)"
    ma se non c'e' ancora l'ip nella tabella mi mette SBanErr a 1 correttamente, poi a 2 e poi continua ad aggiornare a 2 (ho provato a mettere 33 nell'if ma non lo scrive mai). mi sfugge qualcosa
    Da un grande potere derivano grandi responsabilità

  8. #8
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    391
    Ho capito non ci vuole il VALUE, la query corretta e'
    codice:
    SecureSQL=" INSERT INTO SecureBan (SBanIP, SBanErr) "& _
    " VALUES ('" & Request.ServerVariables("REMOTE_HOST") & "', 1) "& _
    " ON DUPLICATE KEY UPDATE SBanErr = IF( SBanErr <= 10 , SBanErr + 1 , SBanErr)"
    ho anche letto qui https://mariadb.com/kb/en/values-value/ ma a questo punto non ho capito a cosa serve
    Da un grande potere derivano grandi responsabilità

  9. #9

  10. #10
    Utente di HTML.it L'avatar di abellos
    Registrato dal
    Feb 2002
    Messaggi
    391
    si risolto grazie
    Da un grande potere derivano grandi responsabilità

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.