将变量从PHP传递到Javascript,而不在HTML中显示
我需要发送一个大变量,而不在生成的HTML页面中显示它,因为: -我可以泄露敏感数据(只需检查页面来源即可) -由于数据量很大,它会大大降低页面加载速度 当然,使用“echo”是不可能的,我已经搜索了很多不同的方法,但没有找到合适的方法 即使使用Ajax或Json刷新页面,从外部调用脚本也可以,但到目前为止,我还没有找到一种方法来完成我需要的工作。 有人能帮我吗?将变量从PHP传递到Javascript,而不在HTML中显示,javascript,php,html,Javascript,Php,Html,我需要发送一个大变量,而不在生成的HTML页面中显示它,因为: -我可以泄露敏感数据(只需检查页面来源即可) -由于数据量很大,它会大大降低页面加载速度 当然,使用“echo”是不可能的,我已经搜索了很多不同的方法,但没有找到合适的方法 即使使用Ajax或Json刷新页面,从外部调用脚本也可以,但到目前为止,我还没有找到一种方法来完成我需要的工作。 有人能帮我吗? 谢谢Roberto将对用户可见Javascript。你绕不开它。 Php在服务器上运行,对用户隐藏。 另一方面,Javascript
谢谢Roberto将对用户可见Javascript。你绕不开它。
Php在服务器上运行,对用户隐藏。
另一方面,Javascript由用户“机器”运行,因此它是可见的 Javascript将对用户可见。你绕不开它。
Php在服务器上运行,对用户隐藏。
另一方面,Javascript由用户“机器”运行,因此它是可见的 您可以在
html
中隐藏任何您想要的内容,但是如果您需要在php
和JS
之间传递一个值,通过jQuery
、get
、post
或任何其他方法检索该值,最终用户将能够读取该值
注意: 你们可以随意投反对票,但我会保留我的答案,直到有人解释如何“将变量从PHP传递到Javascript”,而不向最终用户公开数据
编辑+4年后(2020年): 一种可能的解决方案是加密您想要向最终用户隐藏的代码,并在用户发回时解密,即:
<?php
function encdec($t, $s){
$secret_key = 'secret_key';
$secret_iv = 'secret_iv';
$output = false;
$encrypt_method = "AES-256-CBC";
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
if( $t == 'e' ) {
$output = base64_encode( openssl_encrypt( $s, $encrypt_method, $key, 0, $iv ) );
}
else if( $t == 'd' ){
$output = openssl_decrypt( base64_decode( $s ), $encrypt_method, $key, 0, $iv );
}
return $output;
}
$my_secret = encdec("e", "internal_XPto123");
echo $my_secret;
# Then, when the user posts it back, via form or any other method, you decrypt it:
$my_secret = encdec("d", $_REQUEST['some_arg']);
if (preg_match('/^internal_[a-z\d]{7}$/i', $my_secret)) {
# string structure matches, continue...
}
您可以在html
中隐藏任何您想要的内容,但是如果您需要在php
和JS
之间传递一个值,可以通过jQuery
、get
、post
或任何其他方法进行检索,最终用户将能够读取该值
注意:
你们可以随意投反对票,但我会保留我的答案,直到有人解释如何“将变量从PHP传递到Javascript”,而不向最终用户公开数据
编辑+4年后(2020年):
一种可能的解决方案是加密您想要向最终用户隐藏的代码,并在用户发回时解密,即:
<?php
function encdec($t, $s){
$secret_key = 'secret_key';
$secret_iv = 'secret_iv';
$output = false;
$encrypt_method = "AES-256-CBC";
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );
if( $t == 'e' ) {
$output = base64_encode( openssl_encrypt( $s, $encrypt_method, $key, 0, $iv ) );
}
else if( $t == 'd' ){
$output = openssl_decrypt( base64_decode( $s ), $encrypt_method, $key, 0, $iv );
}
return $output;
}
$my_secret = encdec("e", "internal_XPto123");
echo $my_secret;
# Then, when the user posts it back, via form or any other method, you decrypt it:
$my_secret = encdec("d", $_REQUEST['some_arg']);
if (preg_match('/^internal_[a-z\d]{7}$/i', $my_secret)) {
# string structure matches, continue...
}
如果您将任何数据“从PHP传递到Javascript”,它无论如何都是可见的,我认为……Javascript在客户端总是可见的。你不可能这么做。你想用这些敏感数据做什么?为什么不把它放在服务器端呢?你能再描述一下你的问题吗?好的,那么,如果你能使用ajax/json/jsonp:google“jqueryajax教程”。你会发现大量的例子。如果你不想使用jquery,那么进行ajax调用就更冗长了,但仍然非常简单。你可以从html中隐藏任何你想要的内容,但是如果你需要在页面上使用php的值,可以通过jquery get或post或任何其他方法检索,用户将能够读取它。如果你将任何数据“从php传递到Javascript”无论如何它都是可见的,我认为……Javascript在客户端总是可见的。你不可能这么做。你想用这些敏感数据做什么?为什么不把它放在服务器端呢?你能再描述一下你的问题吗?好的,那么,如果你能使用ajax/json/jsonp:google“jqueryajax教程”。你会发现大量的例子。如果您不想使用jquery,那么进行ajax调用会比较冗长,但仍然非常简单。您可以从html中隐藏任何您想要的内容,但是如果您需要在页面上使用php的值,可以通过jquery get或post或任何其他方法检索,用户将能够阅读它。我没有投反对票,但很明显,这个答案非常适合作为一个例子comment@Pushkar我在某种程度上同意你的看法,但有时问题的答案是不可能,这就是为什么我不回答这样的问题questions@Pushkar在我看来,这不应该是不回答问题的理由。谢谢你的评论,我解释了原因是什么,以及最终是如何解决的,在一个更高屏幕的评论中。虽然我知道服务器端和用户端的这些事实,但我真的希望当信息在用户内存中时,不需要操作系统以Html显示它,我能够以编程方式使用它,但事实并非如此。有时,我们不得不与风车搏斗,否则生活最终会变得无聊。德克萨斯州!我没有投反对票,但很明显,这个答案很适合作为一个候选人comment@Pushkar在某种程度上,我确实同意你的观点,但有时一个问题的答案是这是不可能的。这就是为什么我不回答这样的问题questions@Pushkar我认为这不应该成为不回答问题的理由我非常感谢你的评论,我解释了原因是什么,以及最终是如何解决的,在一个屏幕更高的评论中。虽然我知道服务器端和用户端的这些事实,但我真的希望当信息在用户内存中时,不需要操作系统以Html显示它,我能够以编程方式使用它,但事实并非如此。有时,我们不得不与风车搏斗,否则生活最终会变得无聊。德克萨斯州!无论如何,我认为你的答案是正确的。但是,这取决于用户的定义。虽然您或我可能能够发现封装的数据,但超过99%的人口不会,如果是非敏感信息,比如测验答案信息,那么封装可以满足OP的要求。+1,当然是正确的,用户只需打开控制台即可查看请求的整个响应。@Pamblam forked for future use;)tks@PedroLobito我宁愿在这里的评论中写下这一重大通知(仍然用粗体字)