Question

dans mon script Ruby je dois passer le nom d'utilisateur et

  • mot de passe en texte brut sous une forme afin de se connecter. Les deux nom d'utilisateur et mot de passe sont actuellement stockés dans mon script.

  • Je aucun contrôle sur le serveur je me connecte à partir du script. Le script fonctionne bien et localy à l'avenir je veux passer à sur mon

  • fournisseur d'hébergement Web et l'exécuter à partir de là (j'ai accès ssh)

  • en utilisant Cron . Est-il possible / méthode comment

  • protéger le mot de passe dans le cas où quelqu'un a accès à ce script par hasard?

Était-ce utile?

La solution

Plus je pense à ce sujet, plus je pense que vous devez faire confiance à votre service d'hébergement. Je vous assurer que le service d'hébergement a « la peau dans le jeu ». Autrement dit, qu'ils assez HOST « haut profil » des comptes qui se trouve indigne de confiance serait très coûteux pour les (dans les comptes perdus et ventes)

Et si vous pensez que le service d'hébergement est digne de confiance, vous devriez avoir un plan au cas où le compte cible est compromise. Qui vous informera, comment allez-vous obtenir ce compte désactivé, etc.

La seule solution technologique que je peux penser - vous connecter, saisir manuellement le cookie, et de fournir ce cookie au script - protège le mot de passe, mais sans doute une foule hostile pourrait utiliser ce cookie pour faire des dégâts qu'il voulait sur le système cible en utilisant quelles que soient les privilèges sont attachés à ce cookie, y compris changer votre mot de passe. Donc, il n'y a pas de solution du tout.

Oh, en parlant de privilèges: peut la tâche que vous devez automatiser être accompli avec un compte cible qui a des privilèges baissés, comme un compte en lecture seule, ou qui ne peut pas apporter des modifications à son profil? Avoir seulement vos informations d'identification à faible privilège sur le service d'hébergement réduirait le risque (ou « l'exposition », comme la foule polysyllabique aime à dire).

Réponse préalable, trouvé impossible à appliquer en dessous de la ligne.


Vous pouvez chiffrer l'ID utilisateur et mot de passe en utilisant un autre mot de passe. Pour exécuter, le script doit être fourni avec il est mot de passe. Il utilise ce mot de passe pour déchiffrer le nom d'utilisateur de service Web et mot de passe. Assurez-vous que ne soit pas stocké le mot de passe du script partout, mais seulement conservé en mémoire et seulement assez longtemps pour décrypter l'ID utilisateur final et mot de passe.

Si cela est vraiment important, assurez-vous que votre connexion pour exécuter le script est Crypto (ssh, ssl, etc.), et assurez-vous que le script utilise uniquement https pour vous connecter.

Cela ne vous rend invulnérable à une personne non avec les privilèges root sur la boîte (à un moment donné, l'ID utilisateur en texte clair et mot de passe en mémoire, et donc vulnérable), mais il ne fait-il plus de travail pour eux pour être en mesure d'obtenir l'identifiant utilisateur / mot de passe.

Mise à jour : L'exigence que ce soit automatisé fait la solution ci-dessus pas bon

.

Autres conseils

Si un script automatisé doit exécuter quelque chose avec un mot de passe, vous devez soit avoir lisible par le script (qui ouvre la possibilité de quelqu'un d'autre lecture il) ou bien fournir pas dans l'automatisation.

L'astuce consiste à contourner la partie « Automation » en ayant une start-up d'une fois: exécuter le script comme un petit processus continu qui va se réveiller périodiquement et courir. Avoir le processus demander le mot de passe au démarrage ou via un autre type de requête API (pas sur la ligne de commande!).

Si le serveur redémarre, le mot de passe est perdu jusqu'à ce que vous ouvrez une session et entrez le mot de passe. De cette façon, le mot de passe est uniquement en mémoire, pas sur le système de fichiers.

Vous pouvez une tâche cron pour vérifier le processus et vous alerte si elle ne fonctionne pas.

Si vous devez passer le mot de passe à partir d'un formulaire que vous pouvez sans doute pas modifier d'utiliser un système plus sûr, il y a peu, vous pouvez faire en plus de masquer le mot de passe afin qu'il soit pas immédiatement évident. Cependant, toute personne ayant accès au script lui-même peut simplement trouver où il est passé à la forme et insérer une commande pour imprimer le mot de passe là-bas - il doit être « déchiffré » à ce moment-là pour vous de le transmettre, peu importe .

Pour le protéger des non-programmeurs, vous pouvez XOR avec quelque chose ou faire pivoter les lettres d'un certain montant, mais je ne voudrais pas passer trop de temps sur ce qu'il sera vain contre presque tout le monde avec une compréhension rudimentaire programmation. Au lieu de cela, protéger le script lui-même d'autres (ne mettent pas les droits d'accès aux fichiers de jeu correctement, dans un répertoire visible Web, etc.) utilisateurs. Et si vous ne faites pas confiance à l'administration du serveur, ne pas le télécharger là-bas!

Vous devez stocker une version hachée du mot de passe dans votre base de données. Un hachage est un cryptage à sens unique, il est donc impossible d'utiliser la logique de deviner le mot de passe du mot de passe haché.

Créer une méthode de hachage du mot de passe, et faire quelque chose comme ceci:

require "digest/sha1"
class User
  attr_accessor :password

  def initialize(password)
    @password = hash_password(password)
  end

  def hash_password(password)
    Digest::SHA1.hexdigest(password)
  end

  def valid_password?(password)
    @password == hash_password(password)
  end
end

u = User.new("12345")
p u.password # => "8cb2237d0679ca88db6464eac60da96345513964"
p u.valid_password?("not valid") # => false
p u.valid_password?("12345") # => true

Lorsque vous obtenez le mot de passe en texte clair de la forme, vous passez à votre méthode de valid_password?. Cela fera le même cryptage à sens unique comme lorsque le mot de passe a été stocké. Ainsi, les mots de passe cryptés dans un sens sont comparés. Cela signifie que vous ne stockez une référence au mot de passe réel partout, ce qui est une grande victoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top