Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. An idea I just had to get out there before it dies

An idea I just had to get out there before it dies

Scheduled Pinned Locked Moved The Lounge
sysadmincomalgorithmssecurityregex
49 Posts 21 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • OriginalGriffO OriginalGriff

    The problem there is the same as most "exploits" on Windows (and other systems, including Linux based stand alone hardware): any tiny mistake can expose stuff you didn't expect to. Just think of the number of buffer overrun exploits you heard about a few years ago. Allowing "downloaded code" to run is always a security risk, even if you are pretty sure nothing can get outside the sandbox ...

    "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

    H Offline
    H Offline
    honey the codewitch
    wrote on last edited by
    #11

    :sigh: You're not wrong This is why we can't have nice things.

    Real programmers use butterflies

    OriginalGriffO 1 Reply Last reply
    0
    • H honey the codewitch

      Message passing allows you to send something to another thread or perhaps process or machine(s), to be processed on the remote end. Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network? Doing that would allow your service to be extensible by its clients. As the clients upgrade their capabilities the server follows suit, sometimes without changing it at all. There are two problems with this - complexity and security. There is a solution to both - something like a Pike VM like this Regex as a Tiny "Threaded" Virtual Machine[^] Except with more than 7 or so instructions. It could be built up to be mini VM that understands say 20 different bytecode instructions. If you find that's eating up bandwidth add more instructions that do more complicated things, making them "chunkier", until the VM is mature. Once it gets there you can do like I said with the extensible service. This is either the dumbest idea I've had in the past two weeks to the best. I'm still not sure. Maybe coffee will clear it up. :-D

      Real programmers use butterflies

      R Offline
      R Offline
      Rick York
      wrote on last edited by
      #12

      It seems to me you are describing a stripped down version of sending something like java code somewhere to be executed on a virtual machine. To me, this raises the question of why bother stripping it down? In other words, it seems like a bit of a twist on the HTML browser-server model.

      "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

      H 1 Reply Last reply
      0
      • R Rick York

        It seems to me you are describing a stripped down version of sending something like java code somewhere to be executed on a virtual machine. To me, this raises the question of why bother stripping it down? In other words, it seems like a bit of a twist on the HTML browser-server model.

        "They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"

        H Offline
        H Offline
        honey the codewitch
        wrote on last edited by
        #13

        I guess it kind of is. After i wrote the post i thought about javascript, and extending a Javascript machine to run on the server, but i think other commenters have talked me down from the edge of this particular cliff.

        Real programmers use butterflies

        1 Reply Last reply
        0
        • H honey the codewitch

          :sigh: You're not wrong This is why we can't have nice things.

          Real programmers use butterflies

          OriginalGriffO Offline
          OriginalGriffO Offline
          OriginalGriff
          wrote on last edited by
          #14

          Thomas Huxley:

          The great tragedy of science - the slaying of a beautiful hypothesis by an ugly fact.

          :sigh:

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
          "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

          H 1 Reply Last reply
          0
          • OriginalGriffO OriginalGriff

            Thomas Huxley:

            The great tragedy of science - the slaying of a beautiful hypothesis by an ugly fact.

            :sigh:

            "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

            H Offline
            H Offline
            honey the codewitch
            wrote on last edited by
            #15

            Facts schmacts. Believe what is beautiful, but check your work. :-D

            Real programmers use butterflies

            1 Reply Last reply
            0
            • W W Balboos GHB

              You have to lighten up in your interpretation, often ending up as self criticism. I was just making a funny - I usually forget to click any of the radio buttons for a post. It's the lounge.   Relax.   Take off your shoes. Burp   Phart   Make yourself comfortable. You're among friends, here.

              Ravings en masse^

              "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

              "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

              OriginalGriffO Offline
              OriginalGriffO Offline
              OriginalGriff
              wrote on last edited by
              #16

              Oi! No pharting in the lounge please. That's what elevators are for.

              "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

              "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
              "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

              W 1 Reply Last reply
              0
              • OriginalGriffO OriginalGriff

                Oi! No pharting in the lounge please. That's what elevators are for.

                "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

                W Offline
                W Offline
                W Balboos GHB
                wrote on last edited by
                #17

                Yeah. I know. But how else can we tell you we like you so expressively?

                Ravings en masse^

                "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

                "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

                OriginalGriffO 1 Reply Last reply
                0
                • H honey the codewitch

                  Message passing allows you to send something to another thread or perhaps process or machine(s), to be processed on the remote end. Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network? Doing that would allow your service to be extensible by its clients. As the clients upgrade their capabilities the server follows suit, sometimes without changing it at all. There are two problems with this - complexity and security. There is a solution to both - something like a Pike VM like this Regex as a Tiny "Threaded" Virtual Machine[^] Except with more than 7 or so instructions. It could be built up to be mini VM that understands say 20 different bytecode instructions. If you find that's eating up bandwidth add more instructions that do more complicated things, making them "chunkier", until the VM is mature. Once it gets there you can do like I said with the extensible service. This is either the dumbest idea I've had in the past two weeks to the best. I'm still not sure. Maybe coffee will clear it up. :-D

                  Real programmers use butterflies

                  D Offline
                  D Offline
                  dandy72
                  wrote on last edited by
                  #18

                  honey the codewitch wrote:

                  Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network?

                  The first thought that crossed my mind when I read this was "ActiveX". I'll leave it at that.

                  OriginalGriffO H 2 Replies Last reply
                  0
                  • D dandy72

                    honey the codewitch wrote:

                    Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network?

                    The first thought that crossed my mind when I read this was "ActiveX". I'll leave it at that.

                    OriginalGriffO Offline
                    OriginalGriffO Offline
                    OriginalGriff
                    wrote on last edited by
                    #19

                    :shudder:

                    "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

                    "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                    "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                    D 1 Reply Last reply
                    0
                    • D dandy72

                      honey the codewitch wrote:

                      Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network?

                      The first thought that crossed my mind when I read this was "ActiveX". I'll leave it at that.

                      H Offline
                      H Offline
                      honey the codewitch
                      wrote on last edited by
                      #20

                      :laugh: To be fair they didn't use a VM but i hear you.

                      Real programmers use butterflies

                      1 Reply Last reply
                      0
                      • W W Balboos GHB

                        Yeah. I know. But how else can we tell you we like you so expressively?

                        Ravings en masse^

                        "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

                        "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

                        OriginalGriffO Offline
                        OriginalGriffO Offline
                        OriginalGriff
                        wrote on last edited by
                        #21

                        You are so full of .... hot air

                        "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

                        "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
                        "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt

                        W 1 Reply Last reply
                        0
                        • OriginalGriffO OriginalGriff

                          You are so full of .... hot air

                          "I have no idea what I did, but I'm taking full credit for it." - ThisOldTony "Common sense is so rare these days, it should be classified as a super power" - Random T-shirt AntiTwitter: @DalekDave is now a follower!

                          W Offline
                          W Offline
                          W Balboos GHB
                          wrote on last edited by
                          #22

                          OK - it's time you're given the facts of life. In this case, did you ever wonder why a phart stinks? ? ? ? ? ? ? It's for the benefit of those who didn't hear it.

                          Ravings en masse^

                          "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

                          "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

                          1 Reply Last reply
                          0
                          • H honey the codewitch

                            Message passing allows you to send something to another thread or perhaps process or machine(s), to be processed on the remote end. Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network? Doing that would allow your service to be extensible by its clients. As the clients upgrade their capabilities the server follows suit, sometimes without changing it at all. There are two problems with this - complexity and security. There is a solution to both - something like a Pike VM like this Regex as a Tiny "Threaded" Virtual Machine[^] Except with more than 7 or so instructions. It could be built up to be mini VM that understands say 20 different bytecode instructions. If you find that's eating up bandwidth add more instructions that do more complicated things, making them "chunkier", until the VM is mature. Once it gets there you can do like I said with the extensible service. This is either the dumbest idea I've had in the past two weeks to the best. I'm still not sure. Maybe coffee will clear it up. :-D

                            Real programmers use butterflies

                            D Offline
                            D Offline
                            Daniel Pfeffer
                            wrote on last edited by
                            #23

                            honey the codewitch wrote:

                            Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network?

                            In the Human world, this is known as "education", or "training". You are suggesting that we give the client computers an ability to "learn" - a non-trivial task. At minimum, you would need a "compiler" on the client, with capabilities known to the server. the client would, at minimum, have to understand a "message definition" message which defines both the message format and the code to be executed when the message is sent. If you wish an adaptive system, i.e. one that improves as the capabilities of the client are upgraded, you will need a "send capabilities" message which would allow the client to communicate its capabilities to the server. If you want to get really fancy, you could have the client use a "message definition" message as well, which would allow it to educate the server about unexpected capabilities that it has developed. I'm unsure if that way lies madness or genius. :)

                            Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.

                            H 1 Reply Last reply
                            0
                            • D Daniel Pfeffer

                              honey the codewitch wrote:

                              Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network?

                              In the Human world, this is known as "education", or "training". You are suggesting that we give the client computers an ability to "learn" - a non-trivial task. At minimum, you would need a "compiler" on the client, with capabilities known to the server. the client would, at minimum, have to understand a "message definition" message which defines both the message format and the code to be executed when the message is sent. If you wish an adaptive system, i.e. one that improves as the capabilities of the client are upgraded, you will need a "send capabilities" message which would allow the client to communicate its capabilities to the server. If you want to get really fancy, you could have the client use a "message definition" message as well, which would allow it to educate the server about unexpected capabilities that it has developed. I'm unsure if that way lies madness or genius. :)

                              Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.

                              H Offline
                              H Offline
                              honey the codewitch
                              wrote on last edited by
                              #24

                              Daniel Pfeffer wrote:

                              At minimum, you would need a "compiler" on the client, with capabilities known to the server. the client would, at minimum, have to understand a "message definition" message which defines both the message format and the code to be executed when the message is sent.

                              Yes. Also I wasn't talking about making it learn so much as giving the client software the ability to send remedial software to the server that it could run to perform a task - which instructions are available would be specific to whatever the server does.

                              Real programmers use butterflies

                              D 1 Reply Last reply
                              0
                              • H honey the codewitch

                                Daniel Pfeffer wrote:

                                At minimum, you would need a "compiler" on the client, with capabilities known to the server. the client would, at minimum, have to understand a "message definition" message which defines both the message format and the code to be executed when the message is sent.

                                Yes. Also I wasn't talking about making it learn so much as giving the client software the ability to send remedial software to the server that it could run to perform a task - which instructions are available would be specific to whatever the server does.

                                Real programmers use butterflies

                                D Offline
                                D Offline
                                Daniel Pfeffer
                                wrote on last edited by
                                #25

                                honey the codewitch wrote:

                                which instructions are available would be specific to whatever the server does.

                                That is still learning. Humans may be hard-wired to learn language (the "message definition" message), but no human language is universal; every language has some things that cannot be said in it.

                                Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.

                                H P 2 Replies Last reply
                                0
                                • D Daniel Pfeffer

                                  honey the codewitch wrote:

                                  which instructions are available would be specific to whatever the server does.

                                  That is still learning. Humans may be hard-wired to learn language (the "message definition" message), but no human language is universal; every language has some things that cannot be said in it.

                                  Freedom is the freedom to say that two plus two make four. If that is granted, all else follows. -- 6079 Smith W.

                                  H Offline
                                  H Offline
                                  honey the codewitch
                                  wrote on last edited by
                                  #26

                                  Except the instructions are fixed. It could be adapted into a learning system.

                                  Real programmers use butterflies

                                  1 Reply Last reply
                                  0
                                  • H honey the codewitch

                                    Message passing allows you to send something to another thread or perhaps process or machine(s), to be processed on the remote end. Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network? Doing that would allow your service to be extensible by its clients. As the clients upgrade their capabilities the server follows suit, sometimes without changing it at all. There are two problems with this - complexity and security. There is a solution to both - something like a Pike VM like this Regex as a Tiny "Threaded" Virtual Machine[^] Except with more than 7 or so instructions. It could be built up to be mini VM that understands say 20 different bytecode instructions. If you find that's eating up bandwidth add more instructions that do more complicated things, making them "chunkier", until the VM is mature. Once it gets there you can do like I said with the extensible service. This is either the dumbest idea I've had in the past two weeks to the best. I'm still not sure. Maybe coffee will clear it up. :-D

                                    Real programmers use butterflies

                                    Greg UtasG Offline
                                    Greg UtasG Offline
                                    Greg Utas
                                    wrote on last edited by
                                    #27

                                    I worked on a product that did this. The primary server downloaded code to access servers at run time, on a per-session basis. It took the form of opcodes in an interpreted language, running on a virtual stack machine. The access servers were also preloaded with "scripts" that the downloaded code could invoke, which reduced its size. This was an embedded system, so security wasn't an issue. It wasn't too complex, but a detailed spec didn't have to be written: it was proprietary, so however the access devices worked was the de facto spec. New access devices had to be backward compatible, which sometimes meant replicating the idiosyncrasies of the original access devices with regard to how the language was interpreted. All of this generally worked well, but you can add backward compatibility as a third problem if trying to do this for more complicated applications.

                                    Robust Services Core | Software Techniques for Lemmings | Articles

                                    <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                    <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                    H 1 Reply Last reply
                                    0
                                    • H honey the codewitch

                                      Message passing allows you to send something to another thread or perhaps process or machine(s), to be processed on the remote end. Usually, you have a fixed number of "messages" that the other side understands, but what if you could send *code* in the stream, even across process or network? Doing that would allow your service to be extensible by its clients. As the clients upgrade their capabilities the server follows suit, sometimes without changing it at all. There are two problems with this - complexity and security. There is a solution to both - something like a Pike VM like this Regex as a Tiny "Threaded" Virtual Machine[^] Except with more than 7 or so instructions. It could be built up to be mini VM that understands say 20 different bytecode instructions. If you find that's eating up bandwidth add more instructions that do more complicated things, making them "chunkier", until the VM is mature. Once it gets there you can do like I said with the extensible service. This is either the dumbest idea I've had in the past two weeks to the best. I'm still not sure. Maybe coffee will clear it up. :-D

                                      Real programmers use butterflies

                                      M Offline
                                      M Offline
                                      Marc Clifton
                                      wrote on last edited by
                                      #28

                                      honey the codewitch wrote:

                                      but what if you could send *code* in the stream, even across process or network?

                                      I did a test case of that using Docker and Python, including the ability to do some basic UI layout, etc. I really liked the idea and it worked well - spin up a Docker instance, run the code, and after a period of inactivity or when the user logs out, kill the Docker instance. Given that one is working in essentially a VM, the only thing one has access to is one's own Linux instance, so I wasn't too concerned with security, haha. For example, you could, in Python, list the contents of the OS folders, etc., but I didn't really care. The impetus for this are those sites that let you run C# code snippets, and I was curious how they might do such a thing, especially given the security issues.

                                      Latest Articles:
                                      Proxy class for TypeScript/Intellisense DOM manipulation

                                      H 1 Reply Last reply
                                      0
                                      • M Marc Clifton

                                        honey the codewitch wrote:

                                        but what if you could send *code* in the stream, even across process or network?

                                        I did a test case of that using Docker and Python, including the ability to do some basic UI layout, etc. I really liked the idea and it worked well - spin up a Docker instance, run the code, and after a period of inactivity or when the user logs out, kill the Docker instance. Given that one is working in essentially a VM, the only thing one has access to is one's own Linux instance, so I wasn't too concerned with security, haha. For example, you could, in Python, list the contents of the OS folders, etc., but I didn't really care. The impetus for this are those sites that let you run C# code snippets, and I was curious how they might do such a thing, especially given the security issues.

                                        Latest Articles:
                                        Proxy class for TypeScript/Intellisense DOM manipulation

                                        H Offline
                                        H Offline
                                        honey the codewitch
                                        wrote on last edited by
                                        #29

                                        Marc Clifton wrote:

                                        especially given the security issues.

                                        There's always the possibility they're relying on .NET's Code Access Security feature to do the heavy lifting. It works pretty well. I could probably find out if I tinkered with the C# code enough to see what it let you do and what it didn't but it's work. ;P

                                        Real programmers use butterflies

                                        1 Reply Last reply
                                        0
                                        • Greg UtasG Greg Utas

                                          I worked on a product that did this. The primary server downloaded code to access servers at run time, on a per-session basis. It took the form of opcodes in an interpreted language, running on a virtual stack machine. The access servers were also preloaded with "scripts" that the downloaded code could invoke, which reduced its size. This was an embedded system, so security wasn't an issue. It wasn't too complex, but a detailed spec didn't have to be written: it was proprietary, so however the access devices worked was the de facto spec. New access devices had to be backward compatible, which sometimes meant replicating the idiosyncrasies of the original access devices with regard to how the language was interpreted. All of this generally worked well, but you can add backward compatibility as a third problem if trying to do this for more complicated applications.

                                          Robust Services Core | Software Techniques for Lemmings | Articles

                                          H Offline
                                          H Offline
                                          honey the codewitch
                                          wrote on last edited by
                                          #30

                                          That's interesting. I like embedded stuff, and certainly that can either disappear security issues, or it can make them much worse. I'm remembering the radiation dosing machine decades ago that was multithreaded and overdosed and killed 3 people because of a race condition. At least if I remember the story correctly. It was taught to me as a lesson about multithreaded code. So I guess it depends on what it controls.

                                          Real programmers use butterflies

                                          Greg UtasG 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups