Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

MS SQL Server + HTML Tags

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος epp1123 στις 21-07-2008, 16:13. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-07-2008, 14:43 43569

    MS SQL Server + HTML Tags

    Καλησπέρα, γίνεται να αποθηκεύσω ως string, κείμενο που περιέχει html tags??

    Λαμβάνω το εξής λάθος όταν εκτελείται το sql erotima :

    Incorrect syntax near '<'.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near '<'.


    Μάλλον χτυπάει όταν βλέπει το πρώτο tag.
  •  21-07-2008, 15:16 43570 σε απάντηση της 43569

    Απ: MS SQL Server + HTML Tags

    Κάνε μας paste και λίγο κώδικα. Έτσι δεν μπορούμε να σε βοηθήσουμε.

    Manos
  •  21-07-2008, 15:21 43571 σε απάντηση της 43569

    Απ: MS SQL Server + HTML Tags

    Το μηνύμα λάθους που παίρνεις σημάνει ότι το SQL statement που φτιάχνεις για να ενημερώσεις την βάση δεδομένων σου είναι λανθασμένο.

    Το πιθανότερο είναι ότι το HTML κείμενο σου περιέχει ειδικούς χαρακτήρες, όπως το ' , ο οποίος δηλώνει το τέλος ενος SQL string.

    Δοκίμασε να αντικαταστήσεις τα μονά ' με δύο μονά ', ή ακόμα καλύτερα χρησιμοποίησε strored procedures ή parametarized sql statements που σου λύνουν τα προβλήματα του δυναμικού SQL και παράλληλα δεν εχουν και προβλήματα SQL injections.

    Για παράδειγμα, αν θέλεις να αποθηκεύσεις το HTML κείμενο στο πεδίο HTMLText του πίνακα Page, θα έγραφες αν χρησιμοποιούσες parametarized sql statements:

    using (SqlConnection conn = new SqlConnection("connection string details..."))
    {
    conn.Open();

    using (SqlCommand comm = conn.CreateCommand())
    {
    comm.CommandText =
    "INSERT INTO Page(HTMLText) VALUES(@HTMLText)";
    comm.Parameters.Add(
    new SqlParameter("@HTMLText", "<html><head></head><body>....</body></html>"));
    comm.ExecuteNonQuery();
    }

    conn.Close();
    }

    Δημοσθένης Στελλάκης

  •  21-07-2008, 15:24 43572 σε απάντηση της 43569

    Απ: MS SQL Server + HTML Tags

    Το έλυσα τελικά. Το sql ερώτημα μου ήταν ως εξής:

    "UPDATE Customers SET " & Request.QueryString("Customers_Parameter") & "="  & Editor.Html & " WHERE (Customers_ID=" & Request.QueryString("Customers_ID") & ")"

    και όταν έμπαιναν τα δεδομένα είχα την εξής εικόνα

    UPDATE Customers SET [Όνομα Κολώνας] = <strong>hello</strong> WHERE (Customers_ID= [Μία τιμή])

    Ύστερα έβαλα τα μονά τα αυτάκια, στο κείμενο που ήθελα να αποθηκεύσω και δουλεύει μία χαρά. Τώρα το ερώτημα μου είναι ως εξής:

    UPDATE Customers SET [Όνομα Κολώνας] = '<strong>hello</strong>' WHERE (Customers_ID= [Μία τιμή])


    Θα κρατήσω και την παραπάνω απάντηση ως συμβουλή. Ευχαριστώ



  •  21-07-2008, 15:39 43574 σε απάντηση της 43570

    Απ: MS SQL Server + HTML Tags

    Το λάθος που έκανες είναι ότι αντί να χρησιμοποιήσεις stored procedures ή parameterized queries δοκίμασες να φτιάξεις ένα SQL statement με string concatenation. Κάπου θα ξέχασες κανένα ' με αποτέλεσμα το < να μεταφραστεί ως "μικρότερο".

    Το πρόβλημα που έχεις όμως είναι ΠΟΛΥ ΠΙΟ ΣΟΒΑΡΟ από ένα ' που ξέχασες. Γράφοντας τέτοιο κώδικα επιτρέπεις σε οποιοδήποτε script kiddie να εκτελέσει κώδικα στην εφαρμογή σου, χρησιμοποιώντας SQL Injection. Ακόμα και αν βάλεις το ', κάποιος κακόβουλος χρήστης μπορεί να βάλει σε κάποιο text box εντολές οι οποίες θα εκτελεστούν από τον SQL server. Για παράδειγμα, θα μπορούσε να γράψει ';DROP TABLE users; και να σου σβήσει ένα ολόκληρο πίνακα. Ή κάτι σαν '123;EXEC master..xp_cmdshell dir-- και να εκτελέσει οποιοδήποτε κώδικα θέλει με τα δικαιώματα του SQL Server account.

    Η λύση είναι απλούστατη. Αντί να χρησιμοποιήσεις string concatenation θα πρέπει να χρησιμοποιήσεις parameterized queries ή stored procedures στις οποίες θα περάσεις ως string parameters τις παραμέτρους σου. Με αυτό τον τρόπο δεν υπάρχει περίπτωση να μεταφραστεί ένα string ως SQL και εξαλείφεται ο κίνδυνος του SQL Injection. Επίσης αποφεύγεις λάθη σαν αυτό που αντιμετώπισες τώρα αλλά πετυχαίνεις και καλύτερες επιδόσεις επειδή ο SQL Server δεν χρειάζεται να ξανακάνει compile τις εντολές που του δίνεις.

    Το παράδειγμα του Wikipedia δείχνει πόσο εύκολο είναι να χρησιμοποιήσεις parameterized queries. Ο κώδικας που πρέπει να γράψεις είναι ο παρακάτω:

    using (SqlCommand myCommand = new SqlCommand("select * from Users where UserName=@username and Password=@password", myConnection))
    {
        myCommand.Parameters.AddWithValue("@username", user);
        myCommand.Parameters.AddWithValue("@password", pass);
        myConnection.Open();
        SqlDataReader myReader = myCommand.ExecuteReader())
        ...................
    }

    Είναι σχεδόν ο ίδιος κώδικας που θα έγραφες για να φτιάξεις το statement με concatenation, μόνο που τώρα προσθέτεις και μία γραμμή ανά παράμετρο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-07-2008, 15:41 43575 σε απάντηση της 43571

    Απ: MS SQL Server + HTML Tags

    ΦΤΟΥ! Με πρόλαβε ο Δημοσθένης! Να επαναλάβω κι εγώ όμως, ότι το SQL Injection είναι πολύ επικίνδυνο αλλά και πανεύκολο στην αντιμετώπιση όταν χρησιμοποιεί κανείς .NET. Τί να πουν και οι καημένοι οι προγραμματιστές PHP οι οποίοι δεν μπορούν να χρησιμοποιήσουν παραμέτρους ...
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-07-2008, 15:51 43577 σε απάντηση της 43575

    Απ: MS SQL Server + HTML Tags

    Μπορούν, μπορούν.. Stick out tongue Να'ναι καλα το Zend Framework που τους έλυσε τα χέρια λιγάκι..
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  21-07-2008, 16:06 43579 σε απάντηση της 43577

    Απ: MS SQL Server + HTML Tags

    Το Zend κάνει κάτι σαν παραμέτρους. Ουσιαστικά αντικαθιστά κάποιους parameter placeholders με τις τιμές των παραμέτρων μετά από σωστό escaping. Έτσι όμως χάνεται το πλεονέκτημα του pre-comiplation ενώ η ασφάλεια από SQL Injection εξαρτάται από το πόσο καλό escaping κάνει το Zend.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-07-2008, 16:13 43581 σε απάντηση της 43569

    Απ: MS SQL Server + HTML Tags

    Ευχαριστώ για τις απαντήσεις σας, Όλα αυτά που είπατε σωστά.

    Δεν το αμελώ το inject, απλά πειρατίζομαι με κάποια πράγματα. Όταν έρθει η στιγμή, θα μπούνε οι παράμετροι, και πάλι ευχαριστώ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems