首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止PHP中的会话劫持、XSS和网络窃听?

防止PHP中的会话劫持、XSS和网络窃听?
EN

Stack Overflow用户
提问于 2015-09-13 08:45:22
回答 1查看 2.8K关注 0票数 2

我是PHP新手,不熟悉会话管理。我正在创建一个电子商务网站,所以我需要创建一个防黑客会议。为此,我搜索了很多关于如何防止会话劫持的内容。我所读到的资料显示,我在代码中包括了以下功能:

代码语言:javascript
复制
\\some saying to use this
 session_start();
session_regenerate_id(true);
\\some others saying to use this
 session_start();
session_regenerate_id(); 

…同时使用HTTPS/TLS。在另一个堆栈溢出post中,我遇到了这样的东西:

  • 使用足够的随机输入生成会话ID (请参阅session.entropy_file、session.entropy_length和session.hash_function)
  • 在传输过程中使用HTTPS保护会话ID
  • 将会话ID存储在cookie中,而不是在URL中,以避免通过引用程序进行泄漏(参见session.use_only_cookies)
  • 设置带有HttpOnly和安全属性的cookie,以禁止通过JavaScript进行访问(如果存在XSS漏洞),并禁止通过不安全的通道进行传输(参见session.cookie_httponly和session.cookie_secure)。

但我不明白这些。对我来说,这只是理论上的;相反,我想要的是一些PHP代码做这些事情--或者任何让这些东西实现的网站,以我可以看到的PHP代码和我们作为例子(而且理想的情况下有一些解释来支持它)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-13 11:30:30

会话劫持-当有人知道您的会话标识号,提供它给服务器,例如,登录您的priveleges。

XSS -跨站点脚本,它与过滤严重的表单相连接,这些表单允许坏人实现他们的javascript代码,例如,cookie文件。它们是两种不同的攻击形式。

关于防止会话劫持的一些技巧: 1)设置php.ini指令:

代码语言:javascript
复制
session.use_only_cookies = 1 -> for using only cookie based session ids
session.use_trans_sid = 0 -> disable showing PHPSESSID in browser url

2)关于届会

代码语言:javascript
复制
session_start();// -> starts your session. 
//Your browser will accept http header with session id and store it.
//You will be identified by this session id, usually PHPSESSID

看起来是这样的:

代码语言:javascript
复制
GET / HTTP/1.1
Host: example.org
User-Agent: Mozilla Compatible (MSIE)
Accept: text/xml, image/png, image/jpeg, image/gif, */*
Cookie: PHPSESSID=1234

会话开始时,您可以向php全局数组$_SESSION提供任何数据,如

代码语言:javascript
复制
$_SESSION['var'] = 'abc';

如果有人知道您的PHPSESSID,他可以向服务器发送相同的http头并开始使用它,就像他是您一样。

因此,避免这种情况的最佳方法是:

( a)每次提供任何重要数据时都使用session_regenerate_id()。它将删除旧的会话号并生成一个新的会话号。

( b)在$_SESSION中保存手指: ip地址和/或浏览器代理。如果他们不一样的话,那不是你。例如:

代码语言:javascript
复制
session_start();
if (isset($_SESSION['HTTP_USER_AGENT']))
{
    if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT']))
     {
         //some code
     }
}
else
{
     $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}

( c)使用SSL提供敏感数据。

希望,你会发现它有用的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32547916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档