Classic ASP Post to MS Access DB - Doesen't Work from Textarea Editor

196 views Asked by At

I use a textarea modifyed with TinyMCE but when I send the form to New.asp which is my "New Post" page, it simply won't upload the content to the server.

That is the error...

Microsoft Office Access Database Engine error '80040e14'

Syntax error (missing operator) in query expression ''<p>-: CLEANED :-</p> <p> </p> <h2><a name='"_Toc421990132'"></a>1)     La Sicurezza</h2> <p> </p> <p'.

/tesina/Argomenti/New.asp, row 18

I Tryed to deal with special characters in ASP to try out if that was the issue, apparently it's not;

I Tryed to upload a text by copy/pasting from word, it doesen't work, tryed from Notepad++, worked once with plain text and no styling at all.

HTML for the Form...

<form id="newar" action="New.asp" method="post">
                                <div class="institle">
                                    <span> Titolo dell'Argomento: </span>
                                    <input type="text" name="txtTitle" placeholder="Titolo">
                                </div>
                                <div class="institle">
                                    <span> Sottotitolo dell'Argomento: </span>
                                    <input type="text" name="txtSubtitle" placeholder="Sottotitolo">
                                </div>
                                <div class="institle">
                                    <span> Scegli la Materia </span>
                                    <%
                                        Dim ID_Materia, NomeMateria, Rs, StrConn, Conn

                                        StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("../Database/Tesina.accdb")

                                        Set Conn = Server.CreateObject("ADODB.Connection")
                                        Set Rs = Server.CreateObject("ADODB.Recordset")

                                        Conn.Open StrConn

                                        Set Rs = Conn.Execute ("SELECT * FROM Materia")

                                            IF NOT Rs.EOF THEN
                                    %>
                                            <Select Name="TxtMateria">
                                    <%
                                                Rs.MoveFirst 
                                                Do While Not Rs.EOF
                                                    ID_Materia = Rs.Fields("ID_Materia")
                                                    NomeMateria = Rs.Fields("NomeMateria")
                                    %>
                                                <Option Value="<%=ID_Materia%>"> <%=NomeMateria%> </Option>
                                    <%
                                                Rs.MoveNext
                                                Loop
                                    %>
                                            </Select>
                                    <%

                                                Rs.Close
                                                Conn.Close
                                                Set Rs = Nothing
                                                Set Conn = Nothing

                                            ELSE 

                                                Rs.Close
                                                Conn.Close
                                                Set Rs = Nothing
                                                Set Conn = Nothing

                                                Response.Write("Nessun Record Disponibile")

                                            END IF
                                %>
                                </div>
                                <div class="editor">
                                    <textarea class="editor" id="editor" name="editor">
                                    </textarea>
                                </div>
                                <div class="institleup">
                                    <div id="filelist"> &nbsp; </div>
                                    <div id="container">
                                        <div id="dragdrop"> 
                                            <span> Drag &amp; Drop </span>
                                        </div>
                                        <div id="buttons">
                                            <button id="pickfiles" href="javascript:;"> Browse Images </button>
                                            <button id="uploadfiles" href="javascript:;"> Upload Images </button>
                                        </div>
                                    </div>
                                    <pre id="console"></pre>
                                    <script type="text/javascript"> 
                                        var uploader = new plupload.Uploader({
                                           runtimes : 'html5,flash,silverlight,html4',
                                           browse_button : 'pickfiles',
                                           container: document.getElementById('container'),
                                           drop_element: "dragdrop",
                                           url : 'Upload/upload.asp',
                                           flash_swf_url : '../js/Moxie.swf',
                                           silverlight_xap_url : '../js/Moxie.xap',

                                           filters : {
                                              max_file_size : '2mb',
                                              mime_types: [
                                                 {title : "Image files", extensions : "jpg,gif,png"},
                                               ]
                                           },
                                           init: {
                                           PostInit: function() {                                                     
                                                document.getElementById('filelist').innerHTML = '';                                     
                                                document.getElementById('uploadfiles').onclick = function() {
                                                    uploader.start();
                                                    return false;
                                                };
                                           },

                                           FilesAdded: function(up, files) {
                                                plupload.each(files, function(file) {                                                
                                                    document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
                                                 });
                                           },

                                           UploadProgress: function(up, file) {                                     
                                                 document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
                                                 },
                                           Error: function(up, err) {     
                                         document.getElementById('console').appendChild(document.createTextNode("\nError #" + err.code + ": " + err.message));
                                           }
                                          }
                                        });
                                        uploader.init();

                                        uploader.bind('FileUploaded', function(up, file, info) {
                                            var obj = JSON.parse(info.response);
                                                $('form#newar').append('<input type="hidden" name="hidimage" value="' + obj.result.FileName + '" />');
                                        });
                                    </script>
                                </div>
                                <div id="submit">
                                    <input type="Submit" value="Inserisci Form">
                                </div>
                            </form>         

ASP Code in the response page.. (New.asp)

<%
IF Session("Amministratore") = "True" THEN
    Dim Titolo, Sottotitolo, TestoBase, TestoQuote, TestoLess, TestoGreat, TestoSlash, ID_Materia, StrConn, Conn
        Titolo = Request.Form("txtTitle")
        Sottotitolo = Request.Form("txtSubtitle")
        TestoBase = Request.Form("editor")
        ID_Materia = Request.Form("txtMateria")

        TestoQuote = Replace(TestoBase,chr(34), "&#39;" & "&#34;")
        TestoLess = Replace(TestoQuote,chr(60), "&#60;")
        TestoGreat = Replace (TestoLess, chr(62), "&#62;")
        TestoSlash = Replace (TestoGreat, chr(47), "&#47;")

        StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("../Database/Tesina.accdb")
        Set Conn = Server.CreateObject("ADODB.Connection")

        Conn.Open StrConn
        Conn.Execute ("INSERT INTO Argomento (Titolo, Sottotitolo, Testo, ID_Materia) Values ('" & [Titolo] & "', '" & [Sottotitolo] & "', '" & [TestoSlash] & "', " & [ID_Materia] & ")")

        Conn.Close          
        Set Conn = Nothing

        Response.Redirect ("ArgomentiAdm.asp")

ELSE

    Response.Redirect ("../Homepage.asp")

END IF
%>

My DB is as Follows...

Table1: Argomento [Topic]
   ID_Argomento (Auto_INC, PrimaryKey)
   Titolo [Title] (Short String 255chr)
   Sottotitolo [Subtitle] (Short String 255chr)
   Testo [Text] ( Long String )
   ID_Materia (ID_Subject) (Integer, ForeignKey Ref. Materia)

Table2: Materia [Subject]
   ID_Materia (Auto_INC, PK)
   NomeMateria (Short String )

EDIT.

Modifyed ASP, which, eventhough I checked on internet, it doesen't work with HTMLEncode, or well, atleast as far as I can see.

IF Session("Amministratore") = "True" THEN
    Dim Titolo, Sottotitolo, Testo, ID_Materia, StrConn, Conn
        Titolo = Server.HTMLEncode(Request.Form("txtTitle"))
        Sottotitolo = Server.HTMLEncode(Request.Form("txtSubtitle"))
        Testo = Server.HTMLEncode(Request.Form("editor"))
        ID_Materia = Request.Form("txtMateria")

        'TestoQuote = Replace(TestoBase,chr(34), "&#39;" & "&#34;")
        'TestoLess = Replace(TestoQuote,chr(60), "&#60;")
        'TestoGreat = Replace (TestoLess, chr(62), "&#62;")
        'TestoSlash = Replace (TestoGreat, chr(47), "&#47;")

        StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Server.MapPath("../Database/Tesina.accdb")
        Set Conn = Server.CreateObject("ADODB.Connection")

        Conn.Open StrConn
        response.write ("Conn.Execute ""(""INSERT INTO Argomento (Titolo, Sottotitolo, Testo, ID_Materia) Values ('" & [Titolo] & "', '" & [Sottotitolo] & "', '" & [Testo] & "', " & [ID_Materia] & ")"")")
            'Conn.Execute ("INSERT INTO Argomento (Titolo, Sottotitolo, Testo, ID_Materia) Values ('" & [Titolo] & "', '" & [Sottotitolo] & "', '" & [Testo] & "', " & [ID_Materia] & ")")
        response.end

        Conn.Close          
        Set Conn = Nothing

        'Response.Redirect ("ArgomentiAdm.asp")

ELSE

    Response.Redirect ("../Homepage.asp")

END IF

And Response.Write of whole submit here...

  Conn.Execute "("INSERT INTO Argomento (Titolo, Sottotitolo, Testo, ID_Materia) Values ('Crittografia Moderna', 'Cos’è la Crittografia? Definizione, Utilizzo ed Implementazione', '<p>-: CLEANED :-</p> <h1><a name="_Toc421990131"></a>Informatica: Cos&#8217;&#232; la Crittografia? Definizione, Utilizzo ed Implementazione</h1> <p>&#160;</p> <h2><a name="_Toc421990132"></a>1)&#160;&#160;&#160;&#160; La Sicurezza</h2> <p>&#160;</p> <p>La <strong>Sicurezza</strong> di un sistema informatico pi&#249; o meno complesso indica il grado di tutela dello stesso e degli utenti utilizzatori, analizzando i Cinque Parametri Fondamentali &#232; possibile quindi capire su quali elementi deve concentrarsi l&#8217;azione di difesa per non incorrere in problemi economici o legali:</p> <p>&#160;</p> <ul> <li><strong>Affidabilit&#224; dei Dati </strong>&#8211; Facolt&#224; di un sistema informatico di permettere una continuativa ed ininterrotta Disponibilit&#224; dei Dati;</li> </ul> <p>&#160;</p> <ul> <li><strong>Integrit&#224; dei Dati</strong> &#8211; Fondamentale per il sistema informatico &#232; di evitare qualsiasi forma di Corruzione dei Dati;</li> </ul> <p>&#160;</p> <ul> <li><strong>Riservatezza </strong>&#8211; Il sistema informatico deve essere in grado di stabilire delle &#8220;Viste&#8221;, ossia di mostrare i dati solo agli utenti autorizzati;</li> </ul> <p>&#160;</p> <ul> <li><strong>Autenticazione ed Autenticit&#224;</strong> &#8211; Sorgente, Destinazione e Contenuto di un messaggio sono sempre disponibili e certe;</li> </ul> <p>&#160;</p> <ul> <li><strong>Non Ripudio dell'Operazione</strong> &#8211; Impossibile per gli utenti negare di aver Ricevuto o Inviato un determinato messaggio;</li> </ul> <p>&#160;</p> <p>&#160;</p> <h2><a name="_Toc421990133"></a>2)&#160;&#160;&#160;&#160; La Crittografia</h2> <p>&#160;</p> <p>La <strong>Crittografia </strong>&#232; una scienza che si occupa di &#8220;<strong>Studiare le Scritture Nascoste</strong>&#8221;, la quale permette di codificare un messaggio, fornendo garanzie superiori a mittente e destinatario sulla base a quale tecnica crittografica viene applicata alla comunicazione, scegliendo quindi accuratamente quali parametri della sicurezza si vogliano garantire;</p> <p>&#160;</p> <p>La crittografia di ambito informatico tiene conto della <strong>Velocit&#224; di Calcolo</strong> dei moderni dispositivi, escludendo di fatto l&#8217;efficacia di ogni cifrario sostitutivo, estremamente presenti nella storia ma abbandonati con l&#8217;avvento degli elaboratori;</p> <p>&#160;</p> <p>L'utente si trova quindi obbligato a scegliere algoritmi fondati su <strong>Leggi Matematiche</strong> basate su analisi e rapporti tra numeri primi costituiti da una quantit&#224; di cifre estremamente elevate.</p> <p>In crittografia il "<strong>Cifrario</strong>&#8221; &#232; lo strumento che contiene le istruzioni che permettono di trasformare il "Testo in Chiaro" in "Testo Crittografato" o viceversa, a meno che l'algoritmo contenuto nel cifrario non sia classificato come "<strong>One-Way Hash</strong>", in quest&#8217;ultimo caso &#232; impossibile risalire da un testo cifrato ad un corrispondente univoco testo in chiaro, in quanto qualsiasi tentativo di decriptazione otterrebbe numerose possibili alternative;</p> <p>&#160;</p> <p>&#160;</p> <h3><a name="_Toc421990134"></a>2.1)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chiavi Sicure e Standard di Cifratura</h3> <p>&#160;</p> <p>Al giorno d'oggi una Chiave "<strong>Discretamente Sicura</strong>" si aggira sui <strong>128</strong> <strong>bit</strong> per algoritmi come il <strong>DES</strong> (Data Encryption Standard) e l'<strong>AES</strong> (Advanced Encryption Standard) che svolgono operazioni altamente complesse utilizzando algoritmi vettoriali di sostituzione applicati su blocchi di dati codificati con <strong>Chiave Simmetrica</strong>;</p> <p>&#160;</p> <p>Lo stesso livello di sicurezza si pu&#242; ottenere con l&#8217;implementazione a <strong>Chiave Asimmetrica</strong> attraverso il metodo matematico <strong>RSA </strong>impiegando chiavi da 1024 o pi&#249; bit, corrispondenti a numeri composti da oltre 300 Cifre.</p> <p>&#160;</p> <p>L'AES in particolare si affida alla ripetizione di un ciclo composto da <strong>4 Operazioni</strong>:</p> <p>&#160;</p> <ul> <li><strong>Sostituzione</strong> per rimuovere ogni linearit&#224;</li> </ul> <p>&#160;</p> <ul> <li><strong>Spostamento degli Elementi di una Riga</strong> verso sinistra in base alla posizione nella matrice ipotizzata da Rijndael;</li> </ul> <p>&#160;</p> <ul> <li><strong>Ricombinazione delle Colonne</strong> moltiplicate per una data matrice 4x4;</li> </ul> <p>&#160;</p> <ul> <li><strong>Operazione di XOR Logico</strong> per decidere se moltiplicare o meno il risultato per una tabella data.</li> </ul> <p>&#160;</p> <p>&#160;</p> <p>Grazie alla non-linearit&#224; dell'AES, Conosciuto anche come &#8220;Rijndael&#8221; dal nome dello sviluppatore portoghese che lo invent&#242; nel 2001, &#232; pressoch&#233; impossibile, ad oggi, risalire ad un <strong>Algoritmo Risolutivo Univoco</strong> senza conoscere nessun dato intermedio quale il contenuto del messaggio o la grandezza dei "Blocchi";</p> <p>&#160;</p> <p>La scelta di un attacco "<strong>Brute-Force</strong>" risulta altrettanto impossibile a causa delle tempistiche richieste, che si trovano nell'ordine di svariati anni per Chiavi da 128 bit ed oltre.</p> <p>&#160;</p> <p>Secondo l&#8217;agenzia governativa americana &#8220;National Institute of Standards and Technology&#8221; () ha stimato che per le informazioni classificate SECRET sia sufficiente una chiave a 128 bit seguendo il nuovo standard AES, aumentata fino alla grandezza di 192 o 256 bit per informazioni classificate TOP SECRET, garantendo quindi che ogni attacco a tali chiavi possa concludersi soltanto in un fallimento per i prossimi anni.</p> <p>&#160;</p> <p>&#160;</p> <h3><a name="_Toc421990135"></a>2.2)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Oggetto Elaborato Durante la Cifratura: Blocchi o Flusso</h3> <p>&#160;</p> <p>Per quanto riguarda il funzionamento degli algoritmi di cifratura si delineano i concetti di <strong>Cifrario a Blocchi </strong>e di <strong>Cifrario a Flusso</strong> che intervengono nella trasformazione da "Testo in Chiaro" a "Testo Cifrato", risulta quindi necessario scegliere se utilizzare un algoritmo progettato per <strong>Analizzare dei </strong>"<strong>Sottoinsiemi</strong>" del messaggio trattati come singoli oggetti o se, invece, sia pi&#249; conveniente allo scopo un algoritmo che effettui la cifratura <strong>Leggendo Singolarmente Ogni Simbolo</strong> che compone il messaggio;</p> <p>Nel tentativo di risalire al testo originale prendendo come punto di partenza il Testo Cifrato risulta invece fondamentale conoscere il metodo utilizzato per cifrare il messaggio al fine di accorciare le <strong>Operazioni di Decriptazione</strong>.</p> <p>&#160;</p> <p>&#160;</p> <h3><a name="_Toc421990136"></a>2.3)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chiave di Cifratura: Simmetrica o Asimmetrica</h3> <p>&#160;</p> <p>La cifratura di un messaggio pu&#242; essere eseguita attraverso cifrari che si dividono in due categorie,<strong> Cifratura a Chiave Simmetrica</strong> (Singola) o <strong>Cifratura a Chiave Asimmetrica</strong> (Doppia);</p> <p>Entrambi i metodi evidenziano caratteristiche appropriate ad una situazione, a discapito per&#242; della loro efficacia in situazioni diverse.</p> <p>&#160;</p> <p>La cifratura a <strong>Chiave Simmetrica</strong> utilizza una <strong>Singola Chiave</strong>, la quale viene utilizzata sia per <strong>Cifrare</strong> che per <strong>Decifrare </strong>un messaggio;</p> <p>Il principale svantaggio di questa categoria di cifrari &#232; la necessit&#224; di <strong>Recapitare la Chiave </strong>al destinatario o ai destinatari, il che rende il metodo imperfetto, esponendo il sistema a pericoli durante le operazioni di trasferimento, fisico o via rete, della chiave.</p> <p>&#160;</p> <p>La cifratura a <strong>Chiave Asimmetrica</strong> utilizza una <strong>Coppia di Chiavi</strong>, una <strong>Pubblica</strong> ed una <strong>Privata</strong>, correlate matematicamente tra loro in modo tale che solo l&#8217;altra chiave della coppia rispetto a quella utilizzata per criptare, possa poi decriptare il messaggio;</p> <p>La caratteristica fondamentale &#232; la necessit&#224; di utilizzare le Chiavi in Coppia, garantendo diversi livelli di sicurezza in base agli algoritmi utilizzati o allo scopo che si desidera ottenere.</p> <p>&#160;</p> <p>La cifratura a Chiave Asimmetrica permette di implementare una certa sicurezza per entrambe le parti:</p> <p>&#160;</p> <ul> <li><strong>Garanzia del Mittente</strong> &#8211; La cifratura "In Uscita" avviene con la Chiave Privata del mittente garantendone la provenienza, permettendo per&#242; a chiunque intercetti il messaggio di <strong>Decifrarlo</strong> grazie alla Chiave Pubblica del mittente.</li> </ul> <p>&#160;</p> <ul> <li><strong>Garanzia del Destinatario </strong>&#8211; La cifratura "In Uscita" avviene con la Chiave Pubblica del destinatario, il quale diviene l&#8217;unico in grado di interpretare il messaggio, che per&#242; potrebbe provenire da un dispositivo <strong>Camuffato</strong>, le cui caratteristiche descrittive sono state alterate.</li> </ul> <p>&#160;</p> <ul> <li><strong>Garanzia Bilaterale</strong> &#8211; La cifratura "In Uscita" avviene prima con la Chiave Privata del mittente, poi con la Chiave Pubblica del destinatario, permettendo solo a quest'ultimo di poter accedere al livello pi&#249; interno della cifratura, protetto dalla Chiave Privata del mittente.</li> </ul> <p>&#160;</p> <p>&#160;</p> <h3><a name="_Toc421990137"></a>2.4)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Utilizzo Particolare della Cifratura a Chiave Asimmetrica: La Firma Digitale</h3> <p>&#160;</p> <p>Un particolare utilizzo della Chiave Asimmetrica si concretizza con la "<strong>Firma Digitale</strong>" che consiste nella creazione di un "<strong>Impronta</strong>" di un messaggio tramite l'<strong>Algoritmo di Hash</strong>, il cui risultato &#232; una sequenza di BIT che rappresenta univocamente il documento, e proprio l'impronta viene criptata con Chiave Privata del mittene "In Uscita" per garantire l'identit&#224; dello stesso, nonostante non sia quindi garantita la segretezza del messaggio;</p> <p>Il motivo per cui viene criptata l&#8217;impronta e non l&#8217;intero messaggio &#232; la difficolt&#224; computazionale nel cifrare messaggi molto lunghi, i quali richiederebbero tempistiche estremamente elevate.</p> <p>&#160;</p> <p>Una volta giunti a destinazione il messaggio "In Chiaro" e l'impronta Criptata, viene nuovamente creata un impronta del messaggio dal destinatario, tramite il medesimo Algoritmo di Hash;</p> <p>L'ultimo passaggio nell&#8217;autenticazione tramite firma digitale consiste nel <strong>Decriptare l'Impronta Allegata</strong> al messaggio e <strong>Confrontarla</strong> con <strong>l'Impronta Ottenuta</strong> dal destinatario.</p> <p>&#160;</p> <p>Se l&#8217;impronta allegata al messaggio risulta diversa dall&#8217;impronta creata dal destinatario, allora il messaggio &#232; stato <strong>Modificato</strong> &#8220;<strong>In Transito</strong>&#8221;, e non &#232; pi&#249; lo stesso inviato dal mittente;</p> <p>&#160;</p> <p>Da notare come l&#8217;procedimento venga seguito automaticamente da un software, senza che sia necessaria l&#8217;interazione dell&#8217;utente.</p> <p>-: CLEANED :-</p>', 1)")

I Have't changed the maxchars because that was already one of the things to do, which I won't do if the site doesen't work, eventhough I appreciated the input.

1

There are 1 answers

3
Zam On BEST ANSWER

Can you use String = Server.HTMLEncode(String) instead of Replace?

Can you show your query with data? Just before you going to execute Conn.Execute ? You could do this by using following way

Response.Write "your query"
Response.End

few more suggestion

  1. in HTML control maximum size of text for input

instead

<input type="text" name="txtTitle" placeholder="Titolo">

write

<input type="text" name="txtTitle" placeholder="Titolo" maxlength="255">
  1. and in ASP code also control maximum size

instead

Titolo = Request.Form("txtTitle")

use

Titolo = Left(Server.HTMLEncode(Request.Form("txtTitle")), 255)

Thanks for posting SQL Query. You have issue with char ' (char #39). Use TestoSlash = Replace(TestoSlash, "'", "&#39")