小编Mik*_*ore的帖子

详细的异常/错误消息是否存在安全风险?

我目前检查每个GET和POST变量,isset()并在isset()返回false 时抛出异常.

例1:

if(!isset($_GET['some_var']))
    throw new Exception('GET variable [some_var] is not set.');

$someVar = $_GET['some_var'];
Run Code Online (Sandbox Code Playgroud)

例2:

if(!isset($_GET['some_num']))
    throw new Exception('GET variable [some_num] is not set.');

if(!ctype_digit($_GET['some_num']))
    throw new Exception('GET variable [some_num] is not a number.');

$someNum = $_GET['some_num'];
Run Code Online (Sandbox Code Playgroud)

在我的生产应用程序中,我有一个全局异常处理程序,它将异常和错误发布到日志文件,然后重定向到一个通用的道歉页面.

这是一个好的做法吗?是描述性异常和错误消息,例如上面的安全风险(黑客是否有可能读取异常通知,然后使用该信息来操作我的脚本)?

谢谢!

php security

7
推荐指数
2
解决办法
898
查看次数

通过PHP使用LAST_INSERT_ID()?

当我在MySQL控制台中执行以下操作时,它可以正常工作:

INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

但是,当我通过PHP执行上述查询时,结果为空.

在数据抽象下,我使用的是名为的数据库访问类DB.这就是我通过PHP尝试上述查询的方法:

$embedCode = htmlentities($_POST['embed_code']);

//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");

//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];
Run Code Online (Sandbox Code Playgroud)

我不能通过embed_code选择新的id,因为embed_code可以重复.

谢谢!

php mysql lastinsertid

7
推荐指数
1
解决办法
3万
查看次数

为什么实现ArrayAccess,Iterator和Countable的类不能与array_filter()一起使用?

我有以下课程:

<?php

/*
* Abstract class that, when subclassed, allows an instance to be used as an array.
* Interfaces `Countable` and `Iterator` are necessary for functionality such as `foreach`
*/
abstract class AArray implements ArrayAccess, Iterator, Countable
{
    private $container = array();

    public function offsetSet($offset, $value) 
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    public function offsetExists($offset) 
    {
        return isset($this->container[$offset]);
    }

    public function offsetUnset($offset) 
    {
        unset($this->container[$offset]);
    }

    public function offsetGet($offset) 
    {
        return …
Run Code Online (Sandbox Code Playgroud)

php custom-controls array-filter

7
推荐指数
1
解决办法
3686
查看次数

PHP/Apache:上传的 JPEG 图像文件的权限设置不正确

我刚刚设置了一个 LAMP 开发服务器,并且仍在解决一些问题。服务器安装在一台计算机上,我使用 Windows 笔记本电脑编写代码并通过 Web 浏览器测试站点。

我的文件上传脚本的工作原理是 JPEG 图像文件已成功上传到服务器,但是当我尝试在 Web 浏览器中查看图像时,权限被拒绝。

我通过服务器检查文件的权限,它们是600. 我可以通过 解决问题chmod 777 theimage.jpg,但这似乎根本不是一个好的解决方案。

解决方案是否与Apache配置有关?或者还有什么我应该做的。

谢谢你,迈克

更新

澄清一下,我可以将 JPEG 文件上传到/var/www/test/images,但上传后无法在 Web 浏览器中查看图像。我的脚本在生产服务器上工作(我使用的是 Dreamhost)。这让我相信问题出在我刚刚设置的开发服务器上。非常感谢任何反馈,即使它只是我应该阅读以更好地理解服务器设置的资源。

php apache permissions

6
推荐指数
1
解决办法
2万
查看次数

个人程序员第一次对版本控制感兴趣

可能重复:
版本控制.入门…

我有兴趣首次实现版本控制.我开始积累自定义库,并想知道在Windows Vista操作系统上实现版本控制的方法.我也有一个Ubuntu服务器设置.我不确定操作系统是否相关.

另外,如果它是相关的,我主要使用PHP和AS3.

谢谢!

version-control

6
推荐指数
1
解决办法
470
查看次数

是否有一个函数来测试String变量是否为数字值?

有没有办法测试字符串,如下面的字符串,看看它是否是一个实际的数字值?

var theStr:String = '05';
Run Code Online (Sandbox Code Playgroud)

我想区分上面的字符串值和这样的字符串:

var theStr2:String = 'asdfl';
Run Code Online (Sandbox Code Playgroud)

谢谢!

types actionscript-3

6
推荐指数
1
解决办法
5529
查看次数

通过URL指定Controller类与为每个Controller指定脚本有什么优缺点?

我今年夏天已经设置了两个不同的PHP系统.每个使用两种不同的方法:

方法#1:每个任务一个PHP文件

此方法要求PHP为每个主要任务创建一个文件.例如,我的上传脚本将通过访问http://www.domain.com/upload.php.在upload.php,实例化和使用"控制器"和"视图"类.例如,upload.php可能看起来像这样:

<?php
require_once PATH_LIBRARY . 'control/Uploader.class.php';
require_once PATH_LIBRARY . 'view/UploaderPage.class.php';

$uploader = new Uploader();
$uploader->setView(new UploaderPage());
$uploader->init();
?>
Run Code Online (Sandbox Code Playgroud)

在上面的脚本中,如果我想调用另一个脚本,我只需重定向并附加必要的URL编码变量(header('Location: edit_details.php?image_id=456');).

方法#2:index.php处理所有请求的主文件

此方法不要求PHP为每个主要任务创建文件.相反,将在系统中使用的每个"控制器"类都使用index.php我调用的唯一类进行注册Router.路由器决定指定的Controller是合法的还是非法的并且相应地起作用(将浏览器路由到正确的控制器).例如,index.php脚本的简化版本:

<?php
require_once 'bootstrap.inc';
require_once PATH_LIBRARY . 'router/Router.class.php';

$router = new Router();
$router->register('Uploader', PATH_LIBRARY . 'control/Uploader.class.php');
$router->register('DetailsEditor', PATH_LIBRARY . 'control/DetailsEditor.class.php');
$router->route();
?>
Run Code Online (Sandbox Code Playgroud)

因此,每一个行动都发生在index.php.不需要很多文件,这些文件没有做太多其他实例化特定视图和控制器类的文件.但是,如果你想从脚本/类B调用脚本/类A,那么你需要在URL上传递控制器类的名称:header('Location: index.php?controller=DetailsEditor&image_id=456').

到目前为止,我真的不喜欢我需要在URL中包含Controller名称的事实.我觉得它将我的底层系统暴露给最终用户.但是,我确实喜欢我可以在一个页面上注册所有控制器类的事实.大多数情况下,我不知道暴露控制器名称是否安全.另一个烦恼是,如果我想通过POST请求调用脚本,我必须包含一个指定所需控制器类的隐藏输入(例如<input type="hidden" name="controller" value="DetailsEditor" />).

我希望这足以继续下去.我很紧张第二种方法在未来几个月里并没有真正为我服务.我很快就会选择一个或另一个.

谢谢.

php theory security

6
推荐指数
1
解决办法
383
查看次数

如何知道 MySQL UPDATE 查询是否因为提供的信息与数据库中已有的数据匹配而失败?

我有一个查询,用户在文本区域字段中键入文本块。他们能够将此信息保存在数据库中。问题是,如果他们没有更改信息或者信息与数据库中已有的数据匹配,我会收到受影响行的“0”。通常,当没有受影响的行时,我会显示一条错误,指出查询失败。我如何“知道”0 个受影响的行是因为数据已经存在,以便我可以显示更具体的错误?

mysql sql-update

5
推荐指数
1
解决办法
1万
查看次数

PHP:在哪里放置'false'值?

在"返回错误"声明的位置方面,下列函数之一是否优于其他函数?

功能#1:

function equalToTwo($a, $b)
{
    $c = $a + $b;
    if($c == 2)
    {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

功能#2:

function equalToTwo($a, $b)
{
    $c = $a + $b;
    if($c == 2)
    {
        return true;
    }
    else
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

php

5
推荐指数
1
解决办法
177
查看次数

$ _FILES为空时究竟是什么意思?

我正在研究PHP上传脚本,在测试我的错误检查时,我试图上传一个17MB的TIFF文件.当我这样做时,$ _FILES数组为空.该脚本适用于我需要它做的事情,即上传JPEG文件.我的解决方案是在继续上传脚本之前测试$ _FILES是否为空.

任何人都可以解释为什么尝试上传TIFF时$ _FILES为空?是我的解决方案,检查$ _FILES是否为空,还可以吗?

这与设置有关php.ini吗?

只是为了澄清

$_FILES使用以下内容检查是否为空:

if(empty($_FILES))
{
    die('$_FILES is empty.');
}
Run Code Online (Sandbox Code Playgroud)

php error-handling upload

5
推荐指数
1
解决办法
2870
查看次数