La risposta breve alla tua domanda è "sì".
I blocco dei tentativi di hacking tramite tre metodi.
Io uso cfqueryparam in tutte le mie query di database. Userò cfparam nella parte superiore dei file template/cfm per le variabili dell'URL.
Ho usato Portcullis o varianti di esso. Puoi ottenerlo dal http://portcullis.riaforge.org/. La saracinesca difenderà anche da alcuni attacchi cross-site scripting.
Uso Windows IIS 7.5 (Windows Server 2008 R2). Uso la funzione di riscrittura degli URL per bloccare la maggior parte degli attacchi basati su URL. Puoi fare cose simili con Apache e la riscrittura che supporta. Qui sono le mie regole di riscrittura URL IIS:
<?xml version="1.0" encoding="UTF-8"?>
<appcmd>
<CONFIG CONFIG.SECTION="system.webServer/rewrite/globalRules" path="MACHINE/WEBROOT/APPHOST" overrideMode="Inherit" locked="false">
<system.webServer-rewrite-globalRules>
<rule name="SQL Injection - EXEC - SCRIPT_NAME" stopProcessing="true">
<match url="^.*EXEC\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - EXEC - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*EXEC\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - CAST - SCRIPT_NAME" stopProcessing="true">
<match url="^.*CAST\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - CAST - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*CAST\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - DECLARE - SCRIPT_NAME" stopProcessing="true">
<match url="^.*DECLARE.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - DECLARE - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*DECLARE.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - NVARCHAR - SCRIPT_NAME" stopProcessing="true">
<match url="^.*CHAR\s*[\(|%28].*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - NVARCHAR - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*CHAR\s*[\(|%28].*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - sp_password - SCRIPT_NAME" stopProcessing="true">
<match url="^.*sp_password.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - sp_password - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*sp_password.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - xp - SCRIPT_NAME" stopProcessing="true">
<match url="^.*%20xp_.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SQL Injection - xp - QS" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="^.*%20xp_.*$" />
</conditions>
<serverVariables>
</serverVariables>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
</system.webServer-rewrite-globalRules>
</CONFIG>
</appcmd>
Queste regole vengono aggiunti alla cartella C: inetsrv \ config \ applicationHost.config file \ Windows \ System32 \ per IIS. Comunque io **** NON **** consiglio di modificare direttamente questo file. Un errore e IIS non verrà caricato. Invece copia & incollare le regole sopra e salvarle come "iis-global-rewrite.xml". Quindi eseguire il seguente file batch per aggiungere le regole per il server IIS: regole di riscrittura
C:\Windows\System32\inetsrv\appcmd.exe set config -in < iis-global-rewrite.xml
L'IIS dovrebbero funzionare con IIS 7.0 (Windows Server 2008), ma non l'ho testato.
Queste regole possono anche essere applicate a un singolo sito utilizzando il file web.config se non si ha accesso al server.
Perché utilizzo tre metodi diversi per la protezione? Perché nessuno di loro copre tutte le basi. Le regole di riscrittura di IIS proteggono solo dagli attacchi basati su URL. Gli hacker possono anche utilizzare gli attacchi di sottomissione dei moduli che fanno la stessa cosa. Preferisco le regole di IIS come prima linea di protezione perché funzionerà con tutti i siti sul server, inclusi PHP, ASP, ecc. Portcullis è una buona seconda linea di difesa per ColdFusion perché cattura gli attacchi basati su moduli e alcuni script cross-site attacchi. L'ultima linea di difesa è il codice cfqueryparam/cfparam che protegge dagli attacchi di iniezione SQL basati su URL/moduli.
Se tutti e tre questi metodi sono utilizzati, il server/sito dovrebbe essere molto sicuro. Vorrei ancora consigliare di rivedere i log del server di volta in volta, mentre gli attacchi si evolvono e migliorano.
fonte
2012-04-15 02:48:37
Wow, è semplicemente perfetto. In realtà sto eseguendo CF su IIS, quindi cercherò sicuramente di rendere sicura la mia app web con alcune regole di riscrittura più avanzate. Grazie! – Eleeist
URL IIS Rewrite e Apache mod_rewrite sono strumenti molto utili per difesa e SEO. http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx ha alcuni esempi utili per IIS URL Rewrite. –