关于sql注入你不了解的痛处
SQL注入
所谓SQL注入,就是通过将SQL命令插入Web表单提交或输入域名或页面请求查询字符串,最终实现恶意SQL命令欺骗服务器。
通过下面的例子直观地了解更多关于SQL注入的知识:
有一个登录屏幕。在登录屏幕上,有两个文本框用于输入用户名和密码。当用户单击Login按钮时,将验证用户名和密码。验证后的SQL语句如下:
Select * from student where username=' and password=
如果可以检索数据,则验证已通过,否则验证未通过。
如果用户在用户名文本框中输入'或'1' = '1'或'1' = '1',经过验证的SQL语句变为:
选择* from student where username=' or '1' =' 1' and password=' 1'
如果用户在密码文本框中输入1'或'1' = '1',经过验证的SQL语句变为:
选择* from student where username= " and password='1' or '1'='1'
上面两个SQL语句的where条件总是有效的,所以验证总是有效的。
如果您在用户名文本框中输入Tom ';Drop table student——,则SQL语句变为:
[SQL]视图plaincopyprint ?
选择* from student where username=' Tom ';删除表student——'和password= "
这就变成了两条SQL语句,它们执行查询,然后删除学生表(用双级联表示注释)
如何防止SQL注入:
永远不要相信用户的输入。用户的输入可以通过正则表达式验证,也可以限制长度。转换单引号、双“-”等。
2. 不要使用动态汇编SQL,可以使用参数化SQL或直接使用存储过程进行数据查询访问
永远不要使用管理员授权的数据库连接。为每个应用程序使用单独的受限数据库连接
4. 不直接存储机密信息,加密或散列密码和敏感信息
5. 应用的异常信息应该提供尽可能少的提示,最好使用自定义错误消息包装原始错误信息
6. 使用一些工具或网络平台来检测SQL注入的存在
操作系统命令注入
OS命令注入类似于SQL注入,只是SQL注入用于数据库,OS命令注入用于操作系统。OS命令注入是在服务器上执行任意命令的能力。
如何防止操作系统命令注入:
1. 不要调用外部程序。例如,在UNIX系统上,有一个名为CGI的程序,它执行sendmail命令来发送消息。也许您的web应用程序也有发送邮件的能力。通过直接调用发送邮件到CGI程序非常简单。
2. 过滤和调整;,[,], |, <, >,以此类推
3.设置用户权限
跨站点脚本攻击
跨站点脚本攻击是指攻击者在web页面中插入客户端脚本(如JavaScript)。当用户浏览该网页时,脚本将在用户的浏览器上执行,以达到攻击者的目的,如获取用户的cookie、浏览恶意网站、携带木马等。
XSS攻击场景有以下两个方面:
1. 基于dom的XSS漏洞。攻击过程如下
汤姆找到了搜索。Asp页面在。net中有XSS漏洞,并进行了代码搜索。Asp如下
1.
2.
3.
4. 的结果
5 ....
6.
7.
汤姆建立了一个网站,http://badguy.com,接收“被盗”信息。然后,Tom构建了一个恶意url(如下),并通过某种方式将其发送给Monica(电子邮件、QQ)
http://victim.com/search.asp?术语= / /
如果Monica单击这个URL,嵌入URL的恶意Javascript代码将在Monica的浏览器中执行。然后莫妮卡在malicious.com网站上的饼干会
拥有自己银行账户的黑客马洛里知道,上面的URL可以用来转账。Mallory可以向我们的银行发送一个请求:http://bank.example/?Account = Bob & amount = 1000000 & for = Mallory。但是请求来自Mallory,而不是Bob,而且不能对他进行身份验证,因此请求不能工作。
马洛里想到了使用CSRF进行攻击。他建立了自己的网站,并把以下代码:。诱导鲍勃通过广告等方式访问他的网站。当Bob访问站点时,上面的url从Bob的浏览器发送到银行,请求连同Bob浏览器中的cookie一起发送到银行服务器。在大多数情况下,请求失败是因为他请求Bob的身份验证信息。
但是,如果Bob刚好访问了他的银行,并且浏览器和银行网站之间的会话还没有过期,浏览器的cookie就包含Bob的身份验证信息。然后悲剧发生了,url请求得到了响应,钱从Bob的账户转到了Mallory的账户,Bob当时并不知道。之后,鲍勃发现账户缺钱了。即使他去银行查看日志,他也只能发现自己确实有一个合法的转账请求,而且没有受到攻击的痕迹。马洛里可以拿到钱,然后逍遥法外。
如何防止CSRF跨站请求伪造:
1. 对于web站点,将持久授权方法(如cookie或HTTP授权)切换为临时授权方法(在每个表单中提供隐藏字段)。
2. “双提交”饼干。此方法仅适用于Ajax请求,但可以将其用作全局修复,而无需更改大量表单。如果在表单发布之前JavaScript代码正在读取授权cookie,则应用跨域限制规则。什么是限制性跨域规则?跨域限制规则是,如果服务器需要包含对授权coo的请求