POST在发送数据的时候使用的是HTTP命令
防止SQL注入
SQL(结构化查询语言)是基于美国国家标准学会(ANSI)标准,并作为共同的语言与数据库通信。每个数据库系统增加了一些专有功能到基本的ANSI SQL。
SQL注入是一门将制作好的SQL注入用户输入字段的一种技术,它是网页形式的一部分——用来绕过自定义登录到网站。然而,SQL注入也可以用于登录或者接管一个网站,因此要确保其能防止攻击很重要。
开发人员和管理员可以采取许多不同的步骤解决SQL注入的问题。以下是为开发者提供的解决方案:
· 过滤的所有输入字段单引号(' ),以防止未经授权的登录。
· 过滤器SQL命令的所有输入字段,如插入,选择,工会,删除和exec ,以保护服务器操作。 (请确保操作是在过滤单引号后进行)
· 限制输入字段长度(这将限制攻击者的选择),并用服务器端脚本验证输入长度。
存储过程用处
xp_cmdshell执行数据库电脑操作系统的外部命令
xp_sendmail从数据库电脑发送一封邮件
xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumkeys xp_regenumvalues xp_regread xp_regremovemultistring xp_regwrite控制注册管理的各项因素
xp_servicecontrol启动,停止和暂停服务。可用于攻击者停止关键服务或者激活可被利用的服务,如Telnet服务器服务。
· 使用选项来过滤“转义字符” (用于注入SQL代码,比如单引号) ,如果该数据库提供了该功能。
· 除了Web 服务器,将数据库在不同的计算机的Web服务器上。一旦数据库遭到黑客攻击,也很难攻击到Web服务期。
· 限制的服务器端脚本的用户权限。从服务器端脚本中记录到数据库的通常的做法是使用管理用户,但这可能同事也让攻击者趁机运行需要管理用户的数据库任务(如修改表或运行存储过程) 。所以用最小的用户权限分配来达到此目的。
· 删除所有不必要的扩展存储过程来限制攻击者的可能性。
· 将数据库放置到一个单独的空间(在防火墙后面) ,与Web容器和应用服务器相隔离。
不同于开发商,管理员没有代码的控制权,不能代表程序员产生变化。然而管理员可以通过运行一些测试,并确保代码安全来降低风险:
· 确保Web服务器给返回一个自定义错误页。这样一来,服务器将不会返回SQL错误,这将使攻击者更难获得SQL数据。(自定义错误页面不应该包含任何可能有助于攻击者的信息,不同于常规将返回部分SQL的错误页面。)
· 只部署从Web服务器分离数据的Web应用程序。
· 聘请外部机构对Web服务器上执行穿透测试,并寻找SQL注入攻击。
· 使用一个专用的自动扫描设备来探索由程序员的失误导致的SQL注入漏洞。
· 部署安全解决方案来验证用户输入并过滤SQL注入企图。
二、防止窗体和脚本泄密
窗体用于允许用户输入,但也可以用来管理会话,并在会话内传输的重要数据(如用户或会话标识符)。攻击者可以暴露嵌入在创窗口中的数据,并通过Web应用暴露其他用户信息,或以较低的价格在电子商务中进行交易。3种暴露形式如下:
· 禁用客户端脚本
· 在URL中传递参数
· 通过隐藏字段传递参数
1. 客户端脚本
一些开发人员使用客户端脚本来验证各种方式输入字段:
· 限制输入字段的大小
· 禁止某些字符(如单引号)
· 执行其他类型的验证(这些可以具体到每个站点)
通过禁用客户端脚本( javascript或VBScript)中,此验证可轻松绕过。开发人员应该在服务器端验证所有字段。这可能需要服务器上的额外资源。
2. 通过URL传递参数
窗口有两种方法来传递数据: post和get 。 post命令。在内容流发送数据和get命令在URL中发送数据。攻击者可以利用get命令来发送无效或不正确的数据,或发送恶意代码。
例如,假设我们有这样的形式:
...
<formaction="login.asp"method="get">
<p>username:<inputtype=textname="username"/></p>
<p>password:<inputtype=passwordname=password/></p>
<p><inputtype="submit"name="submit"value="login"/></p>
</form>
...
让我们假设用户输入someusername作为用户名,somepassword为密码。浏览器会被重定向到这个URL
http://thesite/login.asp?username=someusername?password=somepassword
攻击者可以通过简单地修改URL的数据(利用此类型的URL在浏览器的地址栏)。这个方法可以用在电子商务网站来改变项目的价格。例如,看看下面的网址:
http://somesite/checkout.asp?totalprice=100
攻击者可以简单地改变“TOTALPRICE”的值,并执行检出有以较低的价格比之意。这可以简单地通过改变这样的URL来完成:
http://somesite/checkout.asp?totalprice=50
Web应用程序将执行检验,但总价为50美元(代替了2881064151美元)。
另一种情况是,在登录后,用户识别正在使用GET发送,让攻击者修改它,并在另一个用户的名义执行操作。
攻击者可以更改“用户”的值,并当存在用户的时候获得该用户的数据。
3. 通过隐藏字段传递数据
POST在发送数据的时候使用的是HTTP命令。不同于get,这种方法不会显示在URL中的数据,但它也更容易被利用。考虑以下表格:
...<formaction="checkout.asp"method="post"><inputtype="hidden"name="userid"value="102"/><p><inputtype="submit"name="submit"value="checkout"/></p></form>...
POST在发送数据的时候使用的是HTTP命令的更多相关文章
- 【原生态】Http请求数据 与 发送数据
今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求 Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post 根 ...
- sim800 gprs发送数据的AT流程
switch(send_flag) { case 1: uart_send(&huart4,"AT\r\n",4); //AT break; case 2: uart_se ...
- 通过 UDP 发送数据的简单范例
package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net ...
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...
- Linux内核--网络栈实现分析(八)--应用层发送数据(下)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7547826 更多请查看专栏,地 ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- SSH服务器与Android通信(3)--Android客户端发送数据
Android客户端向SSH服务器发送数据主要有三种情况:通过客户端删除数据.添加数据和修改数据. 1.删除数据 先看看jsp文件里面是怎样删除数据的: <td align="cent ...
- php以post方式向接口发送数据
工作需要,我负责收集服务器数据,然后定时向中心服务器发送.我看到了接口信息,需要设置heads头信息,需要发送数据,且是post方式. 这里就用到了curl //发送post请求 function r ...
- 开发板通过UART向主机发送数据
/********************************* 代码功能:开发板通过UART向主机发送数据 使用函数: Serial.begin(数据传输的波特率); Serial.printl ...
随机推荐
- PHP如何通过Http Post请求发送Json对象数据?
因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求时,传入对象. Http中传输对象,最好的表现形式莫过于JSON字符串了, ...
- javascript数据结构-数组
github博客地址 简介 数组是最简单的数据结构,javascript语言也很早就原声支持了数组Array数据类型,和其他语言略微不同的是:js中的数组可以存储不同类型的值,看起来很厉害的样子,但是 ...
- 开大你的音响,感受HTML5 Audio API带来的视听盛宴
话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...
- ecshop后台增加|添加商店设置选项和使用方法详解
有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...
- RobotFrameWork(三)数据类型
1.1 数字变量 执行结果: 1.2 布尔变量和None/null 执行结果: 1.3 字符串.元组.list和字典 执行结果: 1.4 space和empty 执行结果:
- 开发基于Edge渲染内核的浏览器应用
在使用Edge之前,我们先来看看UWP(Universal Windows Platform)平台.微软研发了多种设备平板.手机.Xbox.个人电脑等,在此之前,如果需要给每台设备开发程序,都需要对应 ...
- Java设计模式之创建型模式
创建型模式分为五类:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 一.工厂方法模式:接口-实现类.工厂类
- server2003中看不到网上邻居内容,其他电脑无法通过计算机名和IP访问本计算机(但网上邻居中可访问到)
现象1:server2003中看不到网上邻居内容,查看工作组计算机看到的是空列表, 现象2:其他电脑无法通过计算机名和IP访问本计算机(但网上邻居中可访问到) 访问提示:--Windows 200 ...
- js中选定元素slice()
选定元素slice() slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数说明: 1.返回一个新的数组,包含从 start 到 ...
- [python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...