来源

表单输入或者url传参

常见攻击方式

  • 使用';--
SELECT * FROM  adv where title='zhangsan';DROP TABLE article--'

引号和分号是为了隔离前面的sql语句,后面的--代表注释。因为最后一个'可能会影响删表,所以使用注释不影响执行删表。注意:最后一个引号来自代码封装:原语句可能如下的写法:


$sql = "SELECT * FROM  adv where title='".$_GET['title']."'";
#这句php代码因为title本身是被引号的
  • 使用 ';' +or + --
SELECT * FROM  adv where title='zhangsan' or DROP TABLE article--'

注意:在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是还是可以通过or and 等语句来执行。

预防sql注入

  • 开启php魔术模式,magic_quotes_gpc=on;
  • 打开php.ini中的安全模式 safe_mode = on
  • 关闭危险函数,比如system,chmod等函数;
  • 错误信息控制 ,让非开发人员看到有关数据库错误信息是很危险的,这会泄露数据库,表,字段等名称信息以及其他不安全因素。
  • 使用php自带函数将一些特殊字符转义后再执行sql语句:
    • addslashes() 是强行加\;
    • mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
    • mysql_escape_string不考虑连接的当前字符集。


1、三次握手:

•1)第一次:客户端发送SYN = 1,seq = client_isn

◦作用:客户端:无,服务端:确认自己的接收功能和客户端的发送功能

•2)第二次:服务端发送SYN = 1,seq = server_isn,ACK =client_isn +1

◦作用:客户端:确认自己发送和接收都正常,确认服务端的接收和发送正常,服务端:确认自己的接收正常,确认服务端的发送正常(这时候服务端还不能确认客户端接收是否正常)

•3)第三次:客户端发送SYN = 0, ACK = server_isn+1,seq =client_isn+1

◦作用:双方确认互相的接收和发送正常,建立连接

2、四次挥手

•1)第一次:客户端发送FIN

◦作用:告诉服务端我没有数据发送了(但是还能接收数据)

•2)第二次:服务端发送ACK

◦作用:告诉客户端收到请求了,可能服务端还有数据需要发送,所以客户端收到进入FIN_WAIT状态,等服务端数据传输完之后发送FIN

•3)第三次:服务端发送FIN

◦作用:服务端告诉客户端我发送完了,可以关闭连接了。

•4)第四次:客户端发送ACK

◦作用:客户端收到FIN之后,担心服务端不知道要关闭,所以发送一个ACK,进入TIME_WAIT,等待2MSL之后如果没有收到回复,证明服务端已经关闭了,这时候客户端也关闭连接。

注意:

•当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据

•最后需要等待2MSL是因为网络是不可靠的,如果服务端没有收到最后一次ACK,服务端会重新放FIN包然后等客户端再次发送ACK包然后关闭(所以客户端最后发送ACK之后不能立即关闭连接)


hashtable:将不同的关键字(key)通过映射函数计算得到散列值(Bucket->h) 从而直接索引到对应的Bucket

hash表保存当前循环的指针,所以foreach 比for更快

Bucket:保存数组元素的key和value,以及散列值

主键:

唯一标识一条记录,不能有重复的,不允许为空,一个表只有一个主键,用于保证数据的唯一,完整性。

外键:

表的外键是另一表的主键, 外键可以有重复的, 可以是空值,一个表可以有多个主键,用来和其他表建立关系。

索引:

分主键索引(唯一,不允许空、重复),唯一索引(唯一,可空),普通索引(可空,重复),多个索引,用于加快查询。


NULL 是一个特殊的值,在数据库中表示未知或不可用的值。它表示某个字段没有有效值,或者在查询中没有找到匹配的值。

特性:

  • 对NULL这个值的任何比较都会生产一个NULL值;
  • 您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案;
  • 使用IS NULL来进行NULL判断

基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;

第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

数据库存储过程是一种数据库应用程序,它使用一组特定的SQL语句来操作数据库中的数据。存储过程可以用来提高数据库的性能,提供可重复使用的功能,以及提高数据库的安全性。

优点:

1.可以提高数据库的性能:存储过程可以提高数据库的性能,因为它可以将一组SQL语句封装为一个单独的过程,而不是每次执行SQL语句时都要重新编译它们。

2.可重复使用:存储过程可以被多次使用,这样可以节省开发时间,减少重复代码。

3.提高安全性:存储过程可以提高数据库的安全性,因为它可以限制用户对数据库的访问,同时也可以防止用户误操作数据库。

数据库视图是一种特殊的虚拟表,它的内容来自一个或多个表,可以把多个表的数据组合在一起,以便简化查询。

游标是一种用于遍历数据集的特殊对象,它可以用来查询特定的行,更新特定的行,或者删除特定的行。它可以用来检索数据库中的数据,并在过程中控制行的处理方式,一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

视图的优点:

(1) 视图能够简化用户的操作

(2) 视图使用户能以多种角度看待同一数据;

(3) 视图为数据库提供了一定程度的逻辑独立性;

(4) 视图能够对机密数据提供安全保护。