Pensez-vous activement à la sécurité lors du codage?

9

Lorsque vous codez, pensez-vous activement que votre code pourrait être exploité d'une manière qui n'était pas censée le faire à l'origine et ainsi accéder à des informations protégées, exécuter des commandes ou autre chose que vous ne voudriez pas que vos utilisateurs fassent?

gablin
la source
Lors du codage quoi? Je fais beaucoup de choses différentes.
David Thornley
9
Oui souvent. Habituellement, dans des phrases similaires à "bon sang, je n'ai pas le temps, j'espère que personne ne le découvrira".
liori

Réponses:

10

En quelque sorte. Avertissement: je suis un gars de la sécurité;)

Donc, ma façon de travailler est que j'ai mon modèle de menace, qui décrit quel type d'attaques par quel type d'attaquants sont susceptibles. Cela aide à déterminer les exigences de sécurité. Lorsque je suis en train de coder, je fais les pratiques habituelles de "codage sécurisé", comme faire attention à ce que les variables du curseur soient toujours dans les limites, l'entrée entachée est aseptisée, les conditions d'erreur sont gérées. Ensuite, je reviens à mon modèle de menace pour voir quels modules sont les plus susceptibles d'être ciblés par des attaquants; ceux-ci obtiennent un examen supplémentaire.


la source
4

J'utilise des pratiques standard de l'industrie, comme l'utilisation de paramètres SQL. J'utilise des plates-formes "sûres", comme le .NET Framework, et profite des fonctionnalités de sécurité comme les jetons anti-contrefaçon dans ASP.NET MVC. Je n'écris pas mes propres algorithmes de cryptage, mais je comprends ce que ces cryptages offrent en termes d'avantages de sécurité, et quand je dois les utiliser pour obtenir ces avantages de sécurité.

En bref, j'utilise les meilleures pratiques, mais je ne développe pas mes propres outils de sécurité. Je ne suis pas un expert en sécurité à cet égard; Je m'appuie sur d'autres experts en sécurité, qui ont probablement déjà profondément réfléchi à ces problèmes et ont une compréhension claire des risques et des avantages.

Mon approche fondamentale de la sécurité, au-delà de la simple utilisation d'outils de sécurité, consiste à éliminer toutes les entrées possibles dans le système, sauf celles que j'attends. Si j'ai un champ de numéro de sécurité sociale, les seuls caractères qui devraient réellement apparaître sont des chiffres et des tirets numériques, dans un modèle spécifique.

Je valide les entrées utilisateur sur le client et le serveur.

Robert Harvey
la source
Je suis d'accord avec l'utilisation des fonctionnalités de sécurité intégrées, mais vous devez sûrement penser à quand et comment il est approprié de les utiliser. Je dois dire que je m'inquiète de pouvoir compter sur les autres pour penser à la sécurité de votre produit. Ils ne l'ont pas fait.
Michael Shaw
@Ptolemy: Quand il n'est pas approprié de paramétrer une instruction SQL? Quand n'est-il pas approprié d'utiliser un jeton anti-contrefaçon? Si les données sont sensibles, quand n'est-il pas approprié d'utiliser le cryptage?
Robert Harvey
Examinons le chiffrement pendant un moment. Première question, quel cryptage utilisez-vous? un cryptage médiocre donne un faux sentiment de sécurité. À un moment donné, vous devez décrypter les données. À quel moment faites-vous cela, quels sont les risques pour cela par rapport à la complexité du code. Quelle protection réelle le cryptage vous offre-t-il réellement? Votre code d'octet dll est-il crypté ou la clé de cryptage peut-elle être lue à partir de votre DLL? C'est pourquoi, il est dangereux d'utiliser simplement les fonctionnalités avec peu ou pas de compréhension.
Michael Shaw
@Ptolemy: Si c'est ce que vous voulez dire en pensant à la sécurité, alors je suis d'accord, vous devez vraiment savoir ces choses pour utiliser correctement ces outils.
Robert Harvey
3

Absolument.

La sécurité est tout. Et avec un logiciel numérique, cela va deux fois.
L'autre jour, un utilisateur a réussi à trouver et à exploiter le bogue dans l'un de mes anciens programmes. Les dommages étaient irréparables. Voir ci-dessous:

texte alternatif

Il était rond.

Tour
la source
7
Cela nécessite des explications supplémentaires :)
Toby Allen
Dun dun dun dun ...
Mateen Ulhaq
2

Non, car je ne travaille pas dans un domaine problématique où la sécurité est pertinente (visualisation massive de données SW). Je n'avoir un tas de dans mon code affirme (vérification des index, vérification de la cohérence, etc.), non pas à cause des problèmes de sécurité, mais parce que je comme un code erroné de tomber en panne au début et de crash visiblement.

zvrba
la source
1

Absolument. Je pense aux vulnérabilités d'injection, à la façon dont ma logique métier fonctionnera dans un environnement de bureau par rapport à un environnement Web, et à la manière dont la sécurité est mise en œuvre dans les deux types d'environnements.

Tim Claason
la source
1

Je ne suis pas un expert en sécurité, mais lorsque je code des applications Web, je suppose toujours que les entrées utilisateur peuvent contenir toutes sortes de bizarreries et doivent toujours être complètement échappées. De plus, je fais attention à faire des appels Ajax au serveur pour vérifier que l'utilisateur est connecté (s'il doit être pour cet événement particulier) et qu'il a les autorisations pour faire tout ce qu'il essaie de faire.

La base de code a un ensemble de filtres pour les entrées. Je ne vérifie jamais directement les PHP $_GETou les $_POSTtableaux. Au lieu de cela, je les interroger par une fonction Request::get('parameter', 'filter')avec des filtres tels que int, textet quelques autres. (Et Request::post()pour les entrées POST, bien sûr.)

Trigonométrie
la source
1

Oui. Quand je travaillais sur un jeu multijoueur, tous étaient paranoïaques d'exploits et de moyens de tricher. La tricherie peut détruire totalement un jeu, sans parler des modèles commerciaux liés à la vente de trucs dans le jeu. Les préoccupations en matière de sécurité et les mesures anti-falsification étaient donc très importantes à l'ordre du jour. Je l 'ai beaucoup aimé. J'ai déjà travaillé sur d'autres projets où vous deviez vous sentir coupable d'avoir travaillé plus longtemps sur le code juste pour vous assurer qu'il était sécurisé.

Rayon
la source
0

Oui. La sécurité est importante et ne devrait pas être une réflexion après coup; ajouter la sécurité après coup est généralement plus difficile que de la concevoir dans l'application en premier lieu, et si vous l'ajoutez plus tard, vous manquerez probablement certaines choses (ou tout simplement pas la peine de l'ajouter du tout).

mipadi
la source
0

Comprenez les principes généraux de sécurité (intégrité, authentification, autorité), puis lisez quelques livres sur la façon dont les gens ont renversé ces piliers de la sécurité pendant des millénaires et vous serez à mi-chemin.

Ensuite, lisez quelques bons livres sur la conception et les stratégies de test et vous apprendrez à intégrer la testabilité dans votre architecture.

Nous arrivons maintenant au point où je pense à la sécurité. Je réfléchis à la façon de valider la source de données, est-ce important si les données sont trafiquées, qui est la source de données, dans quelle mesure suis-je sûr? comment aurait-il pu être modifié etc ...

Cela affecte la conception. Les fichiers de configuration peuvent avoir des sections clés chiffrées, ou des champs particuliers peuvent être en texte clair avec un champ de signature associé. Les choses deviennent plus complexes avec les services Internet, car vous devez vous attendre à un plus grand niveau d'hostilité là-bas.

Ensuite, lors des tests, comment testez-vous tout cela? Quelles sont vos entrées de données maximales, que se passe-t-il si vous poussez le logiciel au-delà de ces limites, comment le gère-t-il? À quoi fait-il confiance? comment pouvez-vous tromper cette confiance?

Michael Shaw
la source
0

Oui.

J'ai traité avec suffisamment de pirates dans le passé pour savoir qu'ils essayent constamment de compromettre n'importe quel grand site, et il y a suffisamment de robots là-bas que même les petits sites ne sont pas sûrs.

J'essaie de penser comme un hacker tout le temps maintenant, au point que je m'inquiète parfois de mes collègues avec des commentaires occasionnels sur la façon dont les systèmes que nous tenons pour acquis chaque jour peuvent être utilisés.

realworldcoder
la source
0

Cela devrait être quelque chose que n'importe quel développeur intègre au processus à un degré plus ou moins élevé, selon l'application, etc. Malheureusement, comme les développeurs n'ont pas tendance à citer pour la sécurité, les acheteurs n'ont pas tendance à y penser ( Je sais, c'est un peu un problème, car si les acheteurs veulent le devis le moins cher, il n'inclura peut-être pas de sécurité)

En tant que développeur, vous pouvez obtenir un avantage certain si vous êtes qualifié dans ce domaine - je pense spécifiquement aux banques et aux services financiers, mais d'autres industries sont également applicables. Actuellement, ils peuvent prévoir entre 70 et 100 000 dollars de formation pour qu'un nouveau diplômé soit mis au courant des processus, de la sécurité et d'autres spécificités de cette organisation. Si vous pouvez leur en économiser 30 000, c'est un bon CV en plus!

Au Royaume-Uni, l' Institute of Information Security Professionals et en Écosse, le Center of Excellence in Security and Cybercrime travaillent en étroite collaboration avec les universités pour aider à réviser les supports de cours, offrir des conférences sur les implications réelles d'un mauvais codage et faciliter les stages d'été (par ex. développeurs de logiciels placés dans des divisions de fraude dans l'application des lois.) La plupart des organisations de soutien le font gratuitement, car cela peut leur faire économiser beaucoup d'argent - cela me semble être une valeur.

(Avertissement - J'ai été responsable de la sécurité pour diverses organisations mondiales)

Rory Alsop
la source