sql注入与xss攻击预防
SQL注入
黑客 通过 在表单中填入特殊的字符 或者 是 url中增加特殊的字符,然后想数据库发起请求,拼凑出sql语句,达到攻击的目的。
有两种形式:1. Post表单提交 2. Get,url传参
Post表单如何防范万能密码、万能用户名呢?
最简单的方式,就是给密码加密。
加密的方式有很多,比如md5,sha1
不管是万能用户名 和 万能密码,他们都利用了 一个 特殊字符---单引号\'
让你的单引号失去本身的意义。
单引号转义,使用addslashes函数,对用户名和密码进行转义
凡是是用户提交的信息,都是不能相信的,都需要进行处理,其中之一就是转义。
也就意味着在所有的 收集表单信息的地方,都要调用 addslashes函数。
要处理的 数据的表现形式有以下几种:
1.单一变量
2.一维数组
3.二维数组(多维)
综合成两种情况:单一变量和数组
有没有更好的办法来处理呢?-------批量处理。
可以自定义有一个函数,用于批量转义。
遍历某个数组,然后对数组中的每个元素,做了一个操作。Php提供了一个函数 array_map,可以完成这个功能。
array_map — 将回调函数作用到给定数组的单元上
array array_map ( callable $callback , array $arr1 [, array $... ] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
GET注入
Url 传递参数,然后在程序中接受参数,并构造sql语句
比如:delete from cz_category where cat_id = 1
在后面追加一个字符 or 1
delete from cz_category where cat_id = 1 or 1
灾难性的结果就出现了,全删除了。
所以在接受get传参的时候,也需要处理一下,通常就是传递id的时候。
处理方法很简单,只需要将参数 转成 整型即可。
有哪些方式:
强制转换,使用函数intval 或者 数据类型的 关键字 int
隐式转换,通过运算, 只需要 +0 即可
XSS攻击
Xss: cross site script 跨站脚本攻击
恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户或者破坏页面整体效果的特殊目的。
找出xss攻击的本质,通过 标签(一对尖括号)来达到攻击的目的,所以我们只需要将尖括号 进行 转义,这就是php中提到的 实体转义。
Htmlspecialchars函数 和 htmlentites函数
■'&' (ampersand) becomes '&'
■'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
■"'" (single quote) becomes ''' only when ENT_QUOTES is set.
■'<' (less than) becomes '<'
■'>' (greater than) becomes '>'
总结:只要是用户的输入,都需要经过 引号转义 和 实体转义。