所以我知道MySQL注入并在将它放入我的数据库之前总是转义我的所有用户输入.但是我想知道,想象一个用户试图提交一个查询注入,我逃避它.如果我稍后从数据库中获取此值并在查询中使用它,该怎么办?我必须再次逃脱吗?
所以:( sql::escape()包含我的转义功能)
$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table`
(`foo`,`bar`)
VALUES
('foobar','".sql::escape($userinput)."')");
// insert php/mysql to fetch `table`.`bar` into $output here
mysql_query("INSERT INTO `table2`
(`foo`,`bar`)
VALUES
('foobar','".$output."')");
Run Code Online (Sandbox Code Playgroud)
MySQL会自动转义它们的输出还是类似的东西,还是应该在第二个查询中转义?
这是一个测试用例,但这在我的程序中以其他方式发生,我想知道这样的情况下安全性有多紧.
编辑
我的逃生功能
static function escape($string){
if(get_magic_quotes_gpc())
$string = stripslashes($string);
return mysql_real_escape_string($string);
}
Run Code Online (Sandbox Code Playgroud) 我很想知道,主要是因为我认为我已经在某个地方看过它,如果可以将HTML存储在一个变量中,如下所示(我知道这没有意义,只是为了澄清我的问题):
<? $var = ' ?>
text goes here
<? '; ?>
Run Code Online (Sandbox Code Playgroud)
然后$var就会平等text goes here
我有一个问题需要一些文件,PHP告诉我这些文件不存在,但当我扫描目录它告诉我它确实存在.
我已经将文件简化为require功能,但它仍然无法正常工作.
这是我的设置:
root/
test.php
test/
test2.php
sub/
test3.php
Run Code Online (Sandbox Code Playgroud)
test.php的
echo 'test';
require 'test/sub/test3.php';
Run Code Online (Sandbox Code Playgroud)
test/test2.php(由于某种原因未包含的文件)
echo 'test2';
Run Code Online (Sandbox Code Playgroud)
测试/分/ test3.php
echo 'test3';
/*
because we are still on test.php, the include path is the root
that means the following would work:
require 'test/test2.php';
however I don't know this path in this file. (it's dynamic)
I thought this would work:
*/
set_include_path(dirname(__FILE__));
require '../test2.php';
Run Code Online (Sandbox Code Playgroud)
编辑
好的,当我改变这个:
set_include_path(dirname(__FILE__));
require '../test2.php';
Run Code Online (Sandbox Code Playgroud)
至
set_include_path(dirname(__FILE__)."/../"));
require 'test2.php';
Run Code Online (Sandbox Code Playgroud)
有用.wtf php?
现在这是我的输出:
testtest3
Warning: require(../test2.php) …Run Code Online (Sandbox Code Playgroud) 因此,我正在构建一个使用已经设置的数据库源的网站,并且已经被客户端用于所有其他网站已有一段时间了.
他们通过外部程序填充这个数据库,我无法改变我获取数据的方式.
现在我有以下问题,有时候我会得到UTF-8字符串,有时候是ASCII字符串(我希望我的这些条款正确,有时它们对我来说仍然有点模糊).
所以我可以得到这个:Scénic或者Scénic.
现在的问题是,我必须将其转换为非特殊字符(因此它会成为Scenic).
我不认为有一个转换é为e(如果有告诉)的功能所以我可能需要为包含所有源和目的地的数组创建一个数组,但更大的问题是转换é到它时é不会破坏é那个功能.
或者我应该只创建一个包含所有内容 的数组
(例如:array('é'=>'e','é'=>'e');等等
我知道怎么去é到é,这样做utf8_encode(html_entity_decode('é')),但是将é通过此相同的函数将返回é.
也许我接近这个错误的方式,但在那种情况下,我很想知道我应该如何接近它.
我正在开发一个 HTML5 游戏,在高级模式下使用 Phaser 和 Google Closure 编译器来打包游戏。
我遇到了一个问题,似乎我无法销毁精灵。检查编译器的输出后,我注意到它不断删除我的销毁函数调用。
我的代码很简单,我已经测试了以下内容:
sprite.destroy();和Phaser.Component.Destroy.prototype.destroy.call(sprite);
这两行都只是从我的代码库中删除。这并不是因为它是无法访问的代码,如果我将console.log语句放在相同的范围内,它们就会保留在那里。
所以原来的代码是这样的:
if (typeof this.sprite != 'undefined'){
console.log('destroy sprite');
this.sprite.destroy();
Phaser.Component.Destroy.prototype.destroy.call(this.sprite);
console.log('sprite destroyed');
}
Run Code Online (Sandbox Code Playgroud)
它被编译为:
"undefined"!=typeof this.sprite&&(console.log("destroy sprite"),console.log("sprite destroyed"))
Run Code Online (Sandbox Code Playgroud)
我不明白为什么代码被删除,Phaser 设置为外部,并且我没有使用任何其他方法或 Phaser 类遇到此问题。
顺便说一下,简单地调用eval('this.sprite.destroy();');就可以了。这证明该函数确实存在。然而,这是一个非常糟糕的解决方案,并且只有在编译器在这种情况下没有替换时才有效sprite。
更新
我已经能够用很少的代码可靠地重现该问题,请参阅下面的答案。但我还不知道为什么会发生这种情况。
更新2
感谢 Hacketo,我们发现出现此问题是因为缺少正确的 Phaser 外部文件。专门针对此问题创建一个文件可以修复它,但是如果没有完整的文件,总会有可能出现更多问题。
对于这个特定问题,添加以下文件作为 extern 修复了它:http ://pastebin.com/nXA0fiZr
javascript google-closure-compiler typescript phaser-framework
我想为新客户创建网站介绍.
是否有任何插件/框架突出显示网站的某些区域并显示这些区域的文本?我在大约一年前看到这样的插件与演示但无法找到它.
我更喜欢独立或基于jQuery.
谢谢
所以我通过执行以下操作为我的页面创建URL:
$uri = strtolower($info->name);
$uri = str_replace('&','and',$uri);
$uri = $info->id."-".preg_replace('/[^a-zA-Z0-9]/','-',$uri);
Run Code Online (Sandbox Code Playgroud)
基本上我做的一切小写,改变&以and和更改所有特殊字符的-.我唯一的问题,如果现在比如$info->name是this is - a string它会显示为this-is---a-string.
我希望这可以成为this-is-a-string没有做类似的事情str_replace('---','-',$input);
我想我需要一个正则表达式,但我对那些很可怕,所以我想知道是否有人可以帮助我.
我目前正在为我正在开发的应用程序构建HTML和CSS.
此应用程序有一个固定的高度标题,一个固定的高度页脚和一个应该占据其余空间的中间区域.
问题是我希望页眉和页脚在整个时间内保持固定,而内容如果变得太大则会滚动.
我已经能够将页眉和页脚固定到位的情况下滚动内容,但这会使用push div使得滚动条在标题后面消失,另一个选项使它在页脚后面消失..我有一个很难让div在超过最大尺寸时滚动而不给它100%的高度.
这是我到目前为止:
纯CSS可以实现吗?或者我每次调整大小时都必须使用javascript计算窗口高度?
我的"解决方案"是否接近?
我目前正在开发一个使用 AWS 进行(除其他外)负载平衡的高流量网站。我们正在配置负载平衡器,因此我们有足够的实例运行以保持站点正常运行,但不会太多导致我们亏损。
我们现在解决这个问题的方法是密切关注 CloudWatch 中的 CPU 利用率并相应地更改我们的配置。
但我们遇到的一个问题是,我们似乎无法弄清楚如何让 CloudWatch 绘制正在运行的实例数量的图表,以便我们可以将其抵消到 CPU 使用率。我们只能看到当前有多少实例处于活动状态,因此我们最终不得不多次检查,而不仅仅是回顾过去几小时/几天/几周的统计数据。
理想情况下,我希望查看每个 Elastic Beanstalk 应用程序的实例数量图表。
我对 AWS 及其所有组件还很陌生,所以我可能以完全错误的方式看待这个问题,所以如果有人对如何正确配置实例扩展有任何其他建议和/或资源,我会喜欢听说它。
amazon-web-services amazon-cloudwatch amazon-elastic-beanstalk
我正在尝试用PHP写一个(我认为)非常简单的RegEx,但它不起作用.基本上我有一个像这样定义的块:
%%%%blockname%%%%
stuff goes here
%%%%/blockname%%%%
Run Code Online (Sandbox Code Playgroud)
我对RegEx并不擅长,但这是我试过的:
preg_match_all('/^%%%%(.*?)%%%%(.*?)%%%%\/(.*?)%%%%$/i',$input,$matches);
Run Code Online (Sandbox Code Playgroud)
它返回一个包含4个空条目的数组.
我想它除了实际工作之外还需要某种指针用于第三场比赛,因为它应该等于第一场比赛?
请赐教:)
php ×6
html ×2
javascript ×2
regex ×2
ascii ×1
block ×1
css ×1
escaping ×1
highlighting ×1
jquery ×1
mysql ×1
require ×1
typescript ×1
user-input ×1
utf-8 ×1
variables ×1