Classic ASP Post 到 MS Access DB - 在 Textarea Editor 中不起作用

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

我使用用 TinyMCE 修改过的文本区域,但是当我将表单发送到 New.asp 这是我的 "New Post" 页面时,它根本不会将内容上传到服务器。

那是错误...

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

我尝试处理 ASP 中的特殊字符以尝试是否是问题所在,显然不是;

我尝试通过 copy/pasting 从 word 上传文本,它不起作用,从 Notepad++ 尝试,使用纯文本工作一次,根本没有样式。

HTML 表格...

<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 响应页面中的代码.. (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
%>

我的数据库如下...

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 )

编辑。

已修改 ASP,尽管我在网上查过,但它不适用于 HTMLEncode,或者至少据我所知。

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

并且 Response.Write 整个提交在这里...

  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)")

我没有更改 maxchars,因为这已经是要做的事情之一,如果网站无法正常工作,我不会这样做,尽管我很感激您的意见。

你能用 String = Server.HTMLEncode(String) 代替 Replace 吗?

你能用数据显示你的查询吗?就在你要执行 Conn.Execute 之前?您可以使用以下方式做到这一点

Response.Write "your query"
Response.End

再提几个建议

  1. 在HTML中控制输入文本的最大大小

改为

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

<input type="text" name="txtTitle" placeholder="Titolo" maxlength="255">
  1. 并且在 ASP 代码中还控制最大尺寸

改为

Titolo = Request.Form("txtTitle")

使用

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

感谢发布 SQL 查询。您对 char ' (char #39) 有疑问。 使用 TestoSlash = Replace(TestoSlash, "'", "&#39")