感想 安全问题发生的理解和解决
# 动态语言
之前想的通过规定php语句为双引号,post语句为单引号,其实也是想要把数据和命令限制在两个层级。
编码和人为截取出现的问题似乎是无法完全解决的。
汇编 命令区,数据区
感觉是不是编程语言的问题,如果出现一种编程语言,有专门针对于命令部分和数据部分的区分?
这种思路应该不行,因为在开发中,往往接受的数据
会变成(参与)后面的命令,需要在后面用到它,不能每当要使用到这个变量的时候都先进行预编译(或许又可以?全部编译,最后获得外界输入。哎不想了,等以后学了计组和操作系统,就有答案了)。可能这就是导致安全问题发生的原因。
不过这也是一个思路,改变编译器或者解释器的结构来杜绝用户注入的可能性。
这么想只要客户端和服务端中的交互的某个点可控就有可能发生安全问题,目前来想,虽然可以很高程度的杜绝,但或许没有从根源上杜绝的方法。
# 静态语言
今天写c++程序的时候,意外发现自己的程序有个“漏洞”,在操作流的时候,虽然想的是读一段,然后提示,但是当我带着回车把分属两个变量的内容一起黏贴的时候,只在第一段输入,第二段为空,
依然是一一对应赋值给了这两个变量,是流控制的问题。我突然意识到,不同的编程语言或许都会产生漏洞,对于动态编译的语言,如python,php,会产生变量被当成命令的注入漏洞(能否通过编译的
方式解决还在思考);对于静态编译的语言,如c/c++,他直接操作了底层,操作内存,那么就很容易产生内存溢出,栈溢出等问题。
还没有学习java,不知道如果一种语言,又是编译型的,又没有直接操作内存会怎么样。