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>...

时间: 2025-01-02 16:32:39

POST在发送数据的时候使用的是HTTP命令的相关文章

Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据

By Toradex Leonardo Graboski Veiga 1). 简介 物联网(Internet of Things)概念的本质其实就是关于发送数据到网络,所以称为云服务.随着时代发展和技术进步,人们可以使用尺寸更小功耗更低的电子设备并很容易的连接到云端,不过有一个问题却始终困扰着电子工程师们:如何使用这些获取的数据?而这正是物联网的主题. 在Microsoft主页上面有一些实际的应用例子来展示IoT的应用:一个电梯公司通过物联网来改善并提供预先维护:一个工业自动化公司通过物联网深入

linux串口驱动分析——发送数据

一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数,找到使用的file_operations,即应用程序与tty架构的统一接口.步骤不再赘述. static const struct file_operations tty_fops = { .llseek = no_llseek, .read = tty_read, .write = tty_wr

WebService(二)发送数据+接收数据并进行处理操作

(一)使用WebService发送数据 1.定义webService接口 import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; import com.mxz.fvp.dto.ADto; @WebService public interface MxzReceiveService { public boolean addExpressBarRecord(@WebParam(name = "rec

Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: 1 package cn.itcast_06; 2 3 import java.io.IOException; 4 import java

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方

用IO模拟串口协议发送数据

<pre name="code" class="cpp">//文件usend.h #ifndef _USEND_H_ #define _USEND_H_ //====红外接收相关定义============================= #define PuTx_High (P_uTx = 1) //数据高 #define PuTx_Low (P_uTx = 0) //数据低 #define V_SendDatNum 6//6 //发送数据字节数 /

串口发送数据——字符串发送与十六进制发送的区别

转自:http://blog.csdn.net/wityy/article/details/8234739 串口发送数据——字符串发送与十六进制发送的区别 在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照

向后端请求数据 以及像后端发送数据要求(删除数据和添加数据)

删除数据和添加数据只能后端操作 删除数据和添加数据都要用到的html(一)部分 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="../css/bootstrap.min.css"

Android,使用Json发送数据中,使用的Java转义字符 KanKan原创

kankan原创 与php后台发送数据的时候.要求用到这样的格式. private void sendJson(){ //初始化自己定义的handler CashHandler handler = new CashHandler(this); //请求主地址.写在自己定义Application中了,后面是接口名字 String url = MApplication.get().getAppServiceUrl() + "order/submit"; //自己定义的发送请求方法 LReq