2010-12-14 63 views
3

L'ancienne application Web dont j'ai hérité, qui a été personnalisée pour Oxfam New Zealand dans ASP classique, exécute une chaîne de remplacement sur les entrées soumises par l'utilisateur supprimant la chaîne 'cast' sans doute à cause de la fonction cast. Toutefois, cela signifie qu'aucun de nos participants ne peut avoir un nom ou une adresse e-mail contenant cette chaîne. Cela cause des problèmes pour quelqu'un avec le nom de famille Hardcastle. Cela semble complètement sur le plan de la sécurité - ou du moins, il doit y avoir un moyen de s'assurer que les entrées de l'utilisateur sont en sécurité sans modifier les entrées des personnes avec «cast» dans leur nom ou adresse e-mail.Est-ce que le 'cast' est dangereux dans le contenu soumis par l'utilisateur en ASP classique?

La réelle Replace est fait avec:

strString = (Replace(strString, "cast", "", 1, -1, vbTextCompare)) 

J'envisage simplement de commenter cette ligne sur, serait-ce sans danger?

Répondre

0

je pouvais changer à

strString = (Replace(strString, "cast(", "", 1, -1, vbTextCompare)) 

cette façon, vous obtenez toujours la « sécurité » d'échapper à la SQL, mais n'aggravera les utilisateurs avec le cast dans leurs noms

+0

Semble, mais une solution rapide, et une alternative à moi de commenter complétement –

+0

(procédure stockée) est une meilleure solution de sécurité à long terme.Ce qui est ci-dessus est seulement une solution rapide ... – Sparky

2

L'application héritée est mal le faire. Plutôt que de filtrer le contenu à la source, le contenu doit être codé en propriété, quel que soit son emplacement. En d'autres termes, si elle est utilisée dans une requête, la valeur serait codée avant de l'ajouter à l'instruction SQL ou, mieux encore, elle serait placée sans être importée dans un paramètre de procédure stockée.

Alors oui, vous pouvez supprimer ce code, mais assurez-vous que strString est utilisé en toute sécurité ailleurs.

+0

+1 Pour l'utilisation recomending d'un processus stro ici –

+0

Merci pour votre contribution, je peux avoir été trompeuse sur exactement quand le chaîne de remplacement est fait, je n'ai pas vraiment cherché à voir quand cela arrive, tout ce que je sais, c'est qu'il y a une fonction clean (strString) et cette ligne est l'une des nombreuses lignes avec des chaînes différentes étant remplacées. Il peut en effet être utilisé juste avant qu'il n'entre dans le SQL et non après qu'il a été reçu de la soumission de l'utilisateur. –

+0

En fait, le contenu en question est stocké dans la base de données, y compris le «cast» et il semble donc certain qu'il ne soit pas fait après la soumission, mais avant d'être utilisé. –

0

Il s'agit en fait d'un moyen extrêmement inefficace pour empêcher les attaques par injection SQL. Il y a 100 autres mots que vous auriez besoin de remplacer. La réponse acceptée est incorrecte dans la mesure où elle ne conserve pas la sécurité de ce code, car il n'y a pas de sécurité pour commencer. La ligne avec le caractère "(" ne s'exécuterait jamais si le hacker venait d'ajouter un espace entre CAST et (

Voir cette question sur parameterized queries in classic asp Vous ne voulez jamais concaténer les données fournies par l'utilisateur pour créer une chaîne SQL. Pour ce faire, sans concaténation qui sont corrects, mais le code que vous avez actuellement est inutile.Vous pouvez aussi bien supprimer cette ligne