Quelles seront les meilleures pratiques dans mon code pour empêcher l'injection SQL?

touhidalam69

Quelles seront les meilleures pratiques pour empêcher l'injection SQL? Mon client m'a demandé d'empêcher l'injection SQL. J'ai utilisé cette structure pour insérer ou mettre à jour des données

public bool Add(GreenItem aGreenItem, Employee emp)
        {
            aGreenItem.GreenItemCode = new CommonBLL().GetMaxId("[GreenItemCode]", "[Processing].[GreenItem]", "GTM");
            using (SqlConnection objConnection = Connection.GetConnection())
            {
                SqlTransaction transaction = objConnection.BeginTransaction("SampleTransaction");
                try
                {
                    string query = aGreenItem.GreenItemId == 0 ? "GreenItem_Create" : "GreenItem_Update";
                    SqlCommand sqCmd = new SqlCommand(query, objConnection, transaction);
                    sqCmd.CommandType = CommandType.StoredProcedure;
                    if (aGreenItem.GreenItemId > 0)
                    {
                        sqCmd.Parameters.AddWithValue("@GreenItemId", aGreenItem.GreenItemId);
                    }
                    else
                    {
                        sqCmd.Parameters.AddWithValue("@GreenItemCode", aGreenItem.GreenItemCode);
                    }

                    sqCmd.Parameters.AddWithValue("@GreenItemName", aGreenItem.GreenItemName);
                    sqCmd.Parameters.AddWithValue("@MeasurementUnitId", aGreenItem.MeasurementUnitId);                    
                    sqCmd.Parameters.AddWithValue("@Description", aGreenItem.Description);
                    sqCmd.Parameters.AddWithValue("@IsActive", aGreenItem.IsActive);
                    sqCmd.Parameters.AddWithValue("@GLTId", emp.GLTId);
                    sqCmd.Parameters.AddWithValue("@CreatorId", emp.EmployeeId);
                    sqCmd.ExecuteNonQuery();
                    transaction.Commit();
                    return true;
                }
                catch
                {
                    transaction.Rollback();
                    return false;
                }
            }
        }

J'ai utilisé cette fonction pour obtenir l'ID Max qui est appelé à partir de la fonction ci-dessus

public string GetMaxId(string coloumName, string tableName, string prefix)
        {
            string maxId = ""; string selectQuery = "SELECT '" + prefix + "'+RIGHT('0000000000'+ CONVERT(VARCHAR,ISNULL(MAX(RIGHT(" + coloumName + ",10)), 0)+1,10),10) maxID FROM " + tableName + " ";
            using (SqlConnection objConnection = Connection.GetConnection())
            {
                SqlCommand sqCmd = new SqlCommand(selectQuery, objConnection); sqCmd.CommandType = CommandType.Text;
                using (IDataReader dataReader = sqCmd.ExecuteReader())
                {
                    while (dataReader.Read())
                    {
                        maxId = dataReader["maxID"].ToString();
                    }
                }
                objConnection.Close();
            }

            return maxId;
        }

À quoi faut-il ajouter pour obtenir le meilleur résultat?

Marc Gravell

Avec SQL Server, éviter l'injection SQL se résume à une chose simple

  • utiliser des paramètres, plutôt que la concaténation, pour toutes les entrées

Vous faites déjà cela dans le code que nous pouvons voir, donc: excellent travail jusqu'à présent.

Les gens disent souvent à tort «utiliser des procédures stockées» pour éviter l'injection SQL, mais les «procédures stockées» et «l'injection SQL» sont en fait entièrement orthogonales - vous pouvez éviter l'injection SQL sans procédures stockées, et vous pouvez provoquer une injection SQL dans des procédures stockées. Nous ne pouvons pas voir ce que GreenItem_Create/ GreenItem_Updatefaire en interne - ils sont probablement bien s'ils sont simples INSERT/ UPDATEoperations. Tant qu'ils ne le font pas en EXEC (@somethingYouConcatenated)interne, ça devrait aller. Si vous ne avez besoin de construire T-SQL dans T-SQL, assurez - vous d'utiliser sp_ExecuteSQLcorrectement que SQL paramétrez dynamique.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Quelles sont les meilleures pratiques pour obtenir du code dans un conteneur Docker?

Quelles sont certaines des meilleures pratiques pour suivre les mises à jour d'un enregistrement au fil du temps dans SQL?

Quelles sont les meilleures pratiques pour le partitionnement des données dans MongoDB?

Quelles sont les meilleures pratiques pour rechercher un arbre binaire?

Quelles sont les meilleures pratiques pour unifier l'accès aux propriétés des classes de données

Meilleures pratiques pour l'espacement entre les éléments dans LinearLayout

Empêcher l'injection SQL pour les requêtes SQL en ligne

Meilleures pratiques pour l'assistant de saisie dans les nouveaux composants Ember

Meilleures pratiques pour l'inversion de contrôle dans les bibliothèques?

Quelles sont les meilleures pratiques pour structurer les tests e2e?

Meilleures pratiques pour les assistants personnalisés dans Laravel 5

Meilleures pratiques pour les interfaces vides dans Go?

Quelles sont les meilleures pratiques pour se préparer à AWS Certified Solutions Architect - Associate 2017 pattern

Quelles sont les meilleures pratiques générales de développement dans MuleSoft

Structure de l'application Python Gtk Glade. Quelles sont les meilleures pratiques?

Empêcher l'injection SQL dans Go Postgresql

Meilleures pratiques pour le remplissage des valeurs de clé primaire dans SQL Server à l'aide de Visual Studio

Meilleures pratiques pour les syndicats en Go

Meilleures pratiques pour les clés primaires

Meilleures pratiques pour les composants du bower

Meilleures pratiques Django pour les cours communs

Meilleures pratiques pour trier les couleurs hexadécimales distinctes dans R

Meilleures pratiques pour les tests unitaires avec Catch2 dans Visual Studio

Meilleures pratiques pour stocker les langues dans une base de données

Meilleures pratiques pour gérer les erreurs dans Redux et React

Les meilleures pratiques pour définir un type entièrement nouveau dans le tapuscrit?

Meilleures pratiques pour le code d'état HTTP de l'API REST

Meilleures pratiques pour utiliser la chaîne de connexion dans l'application Asp.Net Core

SQLite comment échapper des valeurs pour empêcher l'injection SQL

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pagination class not getting applied in html

  3. 3

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  4. 4

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  5. 5

    OpenQA.Selenium.NoSuchElementException-C # 셀레늄

  6. 6

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  7. 7

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  8. 8

    Joindre avec des valeurs séparées par des virgules dans SQL Server Compact ne fonctionne pas

  9. 9

    Recherche de la position d'index d'une valeur dans r dataframe

  10. 10

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  11. 11

    caída condicional de filas desde un marco de datos de pandas

  12. 12

    python: ¿por qué dice variable indefinida cuando llamo función?

  13. 13

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

  14. 14

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  15. 15

    Que signifie Decimal (-1)?

  16. 16

    Link library in Visual Studio, why two different ways?

  17. 17

    ¿Cómo determinar la menor cantidad de incrementos de Y necesarios para trazar un múltiplo de 5 en una gráfica?

  18. 18

    nested observables executed one after the other after termination

  19. 19

    uitableview delete button image in iOS

  20. 20

    C # cómo eliminar la última línea de un bucle

  21. 21

    R - ggplot2 - use raster as greyscale basemap

CalienteEtiquetas

Archivo