php图片怎么调用,html和css怎么连接数据库?
html和CSS是无法连接数据库的。HTML前端不能连接数据库,如果需要和数据库进行交互,就需要server端技术,可以选择JSP、PHP、ASP.NET等,这些技术可以实现在前台调用后端数据库,也可使用AJAX进行前后端交互。CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式,对网页中元素位置的排版进行像素级精确控制。
酒店网站是否会泄漏客人预订详情并允许访问个人数据?
赛门铁克首席安全研究人员Candid Wueest近日发文称,酒店网站可能会泄露客人的预订详情,允许其他人查看客人的个人数据,甚至取消他们的预订。在最近研究酒店网站上可能发生的劫持攻击时,Wueest偶然发现了一个可能泄漏客人个人数据的问题。
Wueest测试了多个网站 包括54个国家/地区的1500多家酒店 以确定这个隐私问题的常见程度。我发现这些网站中有三分之二(67%)无意中将预订参考代码泄露给第三方网站,如广告客户和分析公司。他们都有隐私政策,但他们都没有明确提到这种行为。
虽然广告商跟踪用户的浏览习惯已经不是什么秘密,但在这种情况下,共享的信息可以允许这些第三方服务登录预订,查看个人详细信息,甚至完全取消预订。自从《通用数据保护条例》(GDPR)在欧洲生效以来已近一年了,但受此问题影响的许多酒店的遵守法规的速度非常缓慢。
Wueest测试过的网站从乡村的二星级酒店到海滩上的豪华五星级度假村酒店网站。一些预订系统值得称赞,因为它们只显示了数值和停留日期,并没有透露任何个人信息。但大多数网站泄露了个人数据,例如:
全名
电子邮件地址
邮寄地址
手机号码
信用卡、卡类型和到期日的最后四位数字
护照号
是什么导致这些泄漏?
Wueest测试的网站中有超过一半(57%)向客户发送确认电子邮件,并提供直接访问其预订的链接。这是为了方便客户而提供的,只需点击链接即可直接进入预订,无需登录。
由于电子邮件需要静态链接,因此HTTP POST Web请求实际上不是一个选项,这意味着预订参考代码和电子邮件将作为URL本身的参数传递。就其本身而言,这不是问题。但是,许多网站直接在同一网站上加载其他内容,例如广告。这意味着直接访问可以直接与其他资源共享,也可以通过HTTP请求中的referrer字段间接共享。Wueest的测试表明,每次预订平均生成176个请求,但并非所有这些请求都包含预订详细信息。该数字表示可以非常广泛地共享预订数据。
为了演示,Wueest假设确认电子邮件包含以下格式的链接,该链接会自动让Wueest登录到他的预订概述中:
HTTPS://booking.the-hotel.tld/retrieve.php prn=1234567&mail=john_smith@myMail.tld
加载的页面(在此示例中为retrieve.php网站)可以调用许多远程资源。为这些外部对象发出的一些Web请求将直接将完整URL(包括凭据)作为URL参数发送。
以下是分析请求的示例,其中包含完整的原始URL,包括作为参数的参数:
https://www.google-analytics.com/collect?v=1&_v=j73&a=438338256&t=pageview&_s=1&dl=https%3A%2F%2Fbooking.the-hotel.tld%2Fretrieve.php%3Fprn%3D1234567%26mail% 3Djohn%5Fsmith%40myMail.tld&dt
=你的%20booking&sr = 1920x1080&vp = 1061x969&je = 0&_u = SCEBgAAL~&jid = 1804692919&gjid =
1117313061&cid = 1111866200.1552848010&tid = UA-000000-2&_gid = 697872061.1552848010&gtm = 2wg3b2MMKSS89&z = 337564139
如上所述,相同的数据也在referrer字段中,在大多数情况下将由浏览器发送。这导致参考代码与30多个不同的服务提供商共享,包括众所周知的社交网络,搜索引擎以及广告和分析服务。此信息可能允许这些第三方服务登录预订,查看个人详细信息,甚至完全取消预订。
还有其他情况,预订数据也可能被泄露。有些网站会在预订过程中传递信息,而其他网站会在客户手动登录网站时泄露信息。其他人生成一个访问令牌,然后在URL而不是凭据中传递,这也不是好习惯。
在大多数情况下,Wueest发现即使预订被取消,预订数据仍然可见,从而为攻击者提供了窃取个人信息的机会。
酒店比较网站和预订引擎似乎更安全。从Wueest测试的五个服务中,两个泄露了凭据,一个发送了登录链接而没有加密。应该注意的是,Wueest发现了一些配置良好的网站,它们首先需要Digest认证,然后在设置cookie后重定向,确保数据不会泄露。
未加密的链接
可以认为,由于数据仅与网站信任的第三方提供商共享,因此该问题的隐私风险较低。然而,令人遗憾的是,Wueest发现超过四分之一(29%)的酒店网站没有加密包含该ID的电子邮件中发送的初始链接。因此,潜在的攻击者可以拦截点击电子邮件中的HTTP链接的客户的凭证,例如,查看或修改他或她的预订。这可能发生在公共热点,如机场或酒店,除非用户使用VP*软件保护连接。Wueest还观察到一个预订系统在连接被重定向到HTTPS之前,在预订过程中将数据泄露给服务器。
不幸的是,这种做法并不是酒店业独有的。通过URL参数或在referrer字段中无意中共享敏感信息在网站中很普遍。在过去的几年里,Wueest看到过多家航空公司、度假景点和其他网站的类似问题。其他研究人员在2019年2月报告了类似的问题,其中未加密的链接被用于多个航空公司服务提供商。
更多问题
Wueest还发现,多个网站允许强制执行预订参考以及枚举攻击。在许多情况下,预订参考代码只是从一个预订增加到下一个预订。这意味着,如果攻击者知道客户的电子邮件或姓氏,他们就可以猜出该客户的预订参考号并登录。强行预订号码是旅游行业的一个普遍问题,Wueest之前曾在博客中发表过这样的信息。
这样的攻击可能无法很好地扩展,但是当攻击者考虑到特定目标或目标位置已知时,它确实可以正常工作,例如会议酒店。对于某些网站,后端甚至不需要客户的电子邮件或姓名 所需要的只是有效的预订参考代码。Wueest发现了这些编码错误的多个例子,这使Wueest不仅可以访问大型连锁酒店的所有有效预订,还可以查看国际航空公司的每张有效机票。
一个预订引擎非常智能,可以为访客创建一个随机的PIN码,以便与预订参考号一起使用。不幸的是,登录没有绑定到访问的实际预订。因此,攻击者只需使用自己的有效凭据登录并仍可访问任何预订。Wueest没有看到任何证据表明后端有任何速率限制可以减缓此类攻击。
有什么风险?
许多人通过在社交媒体网络上发布照片来定期分享他们的旅行细节。这些人可能不太关心他们的隐私,实际上可能希望他们的关注者知道他们的行踪,但Wuees相当肯定如果他们到达他们的酒店并发现他们的预订已被取消后,他们会更加注意。攻击者可能会因为娱乐或个人报复而决定取消预订,但也可能损害酒店的声誉,作为勒索计划的一部分或作为竞争对手的破坏行为。
酒店业也存在相当多的数据泄露,以及数据配置不当的云数据的数据泄露。然后,这些信息可以在暗网上出售或用于进行身份欺诈。收集的数据集越完整,它就越有价值。
xx者还可以使用以这种方式收集的数据来发送令人信服的个性化垃圾邮件或执行其他社交工程攻击。提供个人信息可以提高勒索邮件的可信度,就像那些声称你被黑客攻击的邮件一样。
此外,有针对性的攻击团体也可能对商业专业人士和政府雇员的行程感兴趣。例如DarkHotel/Armyworm, OceanLotus/Destroyer, Swallowtail及Whitefly等APT团伙。这些群体对这一领域感兴趣的原因有很多,包括一般监视目的,跟踪目标的动作、识别随行人员,或者找出某人在特定地点停留多久。它还可以允许物理访问目标的位置。
解决问题
根据GDPR,欧盟个人的个人数据必须根据这些问题得到更好的保护。然而,受影响酒店对Wueest的调查结果的回应令人失望。
Wueest联系了受影响酒店的数据隐私官(DPO)并告知他们相关调查结果。令人惊讶的是,25%的DPO在六周内没有回复。一封电子邮件被退回,因为隐私政策中的电子邮件地址不再有效。在做出回应的人中,他们平均花了10天回应。做出回应的人主要确认收到他的询问,并承诺调查该问题并实施任何必要的变更。一些人认为,根本不是个人数据,而且必须与隐私政策中所述的广告公司共享数据。一些人承认他们仍在更新他们的系统以完全符合GDPR标准。其他使用外部服务进行预订系统的酒店开始担心服务提供商毕竟不符合GDPR标准。
预订站点应使用加密链接并确保没有凭据作为URL参数泄露。客户可以检查链接是否已加密,或者个人数据(如电子邮件地址)是否作为URL中的可见数据传递。他们还可以使用VP*服务来最大限度地减少他们在公共热点上的曝光率。不幸的是,对于普通的酒店客人来说,发现这样的泄漏可能不是一件容易的事,如果他们想要预订特定的酒店,他们可能没有多少选择。
尽管GDPR大约一年前在欧洲生效,但这个问题存在的事实表明,GDPR的实施还没有完全解决组织如何应对数据泄漏问题。到目前为止,已经报告了超过20万起GDPR投诉和数据泄露案件,用户的个人数据仍然存在风险。
在PHP中如何正确创建函数?
tep 1 =>
php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。
Step 2 =>
Makefile.am Makefile.in
是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对config.h.stub和setup.stub也如法炮制。其实setup.stub也没什么用。
Step 3 =>
php3-pconfig.h 头文件中
extern php3_module_entry pconfig_module_entry;
#define pconfig_module_ptr &pconfig_module_entry
#define phpext_pconfig_ptr pconfig_module_ptr
这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数
下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了
extern PHP_MINIT_FUNCTION(pconfig);
extern PHP_RINIT_FUNCTION(pconfig);
extern PHP_MSHUTDOWN_FUNCTION(pconfig);
PHP_MINFO_FUNCTION(pconfig);
这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。
PHP_FUNCTION(pconfig_test);
如果有多个,还可以继续往下加
PHP_FUNCTION(pconfig_parsefile);
PHP_FUNCTION(pconfig_release); …….
Step 4 =>
接下来我们看最重点的C代码了
function_entry pconfig_functions[] = {
PHP_FE(pconfig_test, NULL)
{NULL, NULL, NULL}
};
定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES
};
注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂操作的话,可以忽略掉他们,写成
php3_module_entry pconfig_module_entry = {
"pconfig", pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES
};
Step 5 =>
写你自己的函数
在头文件和function_entry处,我们已经定义了自己的函数pconfig_test,现在我们就来实现pconfig_test的功能。就比如执行两个数相加的和吧。
static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)
{ ......
}
PHP_FUNCTION(pconfig_test)
{
_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
当系统调用pconfig_test时,会调用你的_php3_pconfig_test函数,当然你也可以把_php3_pconfig_test里的内容直接写在PHP_FUNCTION(pconfig_test)中,这样做只是程序结构比较清晰。注意:不要将_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展开后实际上就是php3_pconfig_test!
Step 6 =>
好了,现在我们开始修改configure,在echo $ac_n "checking for MySQL support""... $ac_c" 1>&6的前面(当然,如果你熟悉configure的话,可以加在任何合适的地方)加上下面几句话
if test "${with_pconfig+set}" = set; then
withval="$with_pconfig"
# Add your lib in here
EXTRA_LIBS="$EXTRA_LIBS"
# Add your include path in here
INCLUDES="$INCLUDES"
EXT_SUBDIRS="$EXT_SUBDIRS pconfig"
EXT_LIBS="$EXT_LIBS pconfig/libphpext_pconfig.a"
EXTINFO_DEPS="$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub"
EXT_STATIC="$EXT_STATIC pconfig"
fi
修改internal_functions.c,在头文件定义中加入#include "ext/pconfig/php3_pconfig.h"
在zend_module_entry数组中加入phpext_pconfig_ptr,
Step 7 =>
从新configure,带上需要的参数,不要忘记的是在参数里加入 --with-pconfig
Step 8 =>
index.php3
<? echo pconfig_test(123,678)."
"; ?>
执行%>php index.php3
eval函数用法总结?
eval定义和用法
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
语法
eval(phpcode)
参数 描述
phpcode 必需。规定要计算的 PHP 代码。
提示和注释
注释:返回语句会立即终止对字符串的计算。
注释:该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用。
例子
$string
$time
$str
echo$str
eval$str$str
echo$str
输出:
This is a $string $time morning!
This is a beautiful winter morning!
eval() 函数在CodeIgniter框架里也有用到。在 /system/database/DB.php 文件中,根据系统的配置动态的定义了一个类 CI_DB,具体代码片段如下:
if ( ! isset($active_record) OR $active_record == TRUE)
{
require_once(BASEPATH.'database/DB_active_rec.php');
if ( ! class_exists('CI_DB'))
{ // www.jbxue.com
eval('class CI_DB extends CI_DB_active_record { }');
}
}
else
{
if ( ! class_exists('CI_DB'))
{
eval('class CI_DB extends CI_DB_driver { }');
}
}
require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');
// Instantiate the DB adapter
$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
$DB = new $driver($params);
本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上。参数 code_str 为欲处理的字符串。值得注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号。使用本函式处理后的字符串会沿续到 PHP 程序结束。
JS怎么调用PHP中的方法?
在js中调用php的方法是直接在script标签的src属性中嵌入要访问的php地址。
1、JS方式调用PHP文件并取得PHP中的值举例说明:如在页面test_json1中用下面这句调用:<script type="text/javascript" src="/index.php/test/testjson2"> </script> <script type="text/javascript" > alert(jstext); </script>
2、在test_json2.php中有这样一段PHP代码:<?php $php_test='I come from PHP!'; echo "var test='$php_test';"; echo "var jstext="."'$php_test';"; ?> 当执行test_json1.php文件时,就会调用test_json2.php文件,并将b.php文件的输出作为JS语句来执行,所以此处会弹出一个提示框,内容为JS变量jstext的值,也就是在PHP文件中赋给jstext的值。
3、调用结果: