SQL注入?
注入方式:
用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。
通过system()/exec()命令注入,它具有相同的SQL注入机制,但只针对shell命令。
怎么防止呢?
使用mysql_real_escape_string()过滤数据
手动检查每一个数据是否为正确的数据类型
使用预处理语句并绑定变量
使用准备好的预处理语句
分离数据和SQL逻辑
预处理语句将自动过滤
2.XSS攻击 (Cross Site Scripting)
跨站点脚本攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常是js)。如果没有过滤就输出数据到另一个web页面,这个脚本将被执行。
恶意攻击者往web页面里面插入恶意Script代码,当用户浏览该页面时,嵌入其中web里面的Script代码将会被执行,从而达到恶意攻击用户的目的。
例如:
以上将会发生什么呢?
烦人的弹窗,刷新或重定向,损坏网页或表单,窃取cookie,AJAX(XMLHttpRequest)
怎么防止XSS攻击呢?
使用php的htmlentities()函数过滤再输出到浏览器。
3.会话固定
会话安全,假设一个PHPSESSID很难猜测。然而,PHP可以接受一个会话ID通过一个Cookie或者URL。所以,欺骗一个受害者可以使用一个特定的(或其他的)会话ID或者钓鱼攻击。
4.会议捕获和劫持
涉及窃取会话ID。如果会话ID存储在Cookie中,攻击者可以通过XSS和JS窃取。如果会话ID包含在URL上,也可以通过嗅探或者从代理服务器那获取。
怎么防止呢?
更新ID、如果使用会话,请确保用户使用SSL
5.跨站点请求伪造(CSRF)
指一个页面发出的请求,看起来像是网站的信任用户,但不是故意的。它有许多的变体。如:
<img src='https://example.com/single_click_to_buy.php?user_id=123&item=12345'>
怎么防止呢?
对用户会话采用适当的安全措施,例如:给每一个会话更新id和用户使用SSL
生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它。
6.代码注入
利用计算机漏洞通过处理无效数据造成的。问题出在,当你不小心执行任意代码,通常通过文件包含。写得很糟糕的代码可以允许一个远程文件包含并执行。如许多php函数,如require可以包含URLh或文件名,例如:
怎么防止呢?
过滤用户输入
在php.ini中设置禁用allow_url_fopen和allow_url_include。这将禁用fopen/include/require的远程文件
7.其他一般原则
不要依赖服务器配置来保护你的应用,特别是当你的web服务器/PHP是由你的ISP管理,或者当你的网站可能迁移/部署到别处,未来再从别处迁移/部署在到其他地方。
设计服务器端的安全脚本,如:
使用单行执行,单点身份验证和数据清理
在所有的安全敏感页面嵌入一个PHP函数/文件,用来处理所有登录/安全性逻辑检查
确保你的代码更新,并打上最新补丁
共同学习,写下你的评论
评论加载中...
作者其他优质文章