Overview

Packages

  • alpha::controller
  • alpha::controller::front
  • alpha::exceptions
  • alpha::model
  • alpha::model::types
  • alpha::tasks
  • alpha::tests
  • alpha::util
  • alpha::util::cache
  • alpha::util::codehighlight
  • alpha::util::convertors
  • alpha::util::feeds
  • alpha::util::filters
  • alpha::util::graphs
  • alpha::util::helpers
  • alpha::util::metrics
  • alpha::view
  • alpha::view::renderers
  • alpha::view::widgets

Classes

  • ActionLogObject
  • AlphaDAO
  • AlphaDAOProviderFactory
  • AlphaDAOProviderMySQL
  • AlphaDAOProviderSQLite
  • ArticleCommentObject
  • ArticleObject
  • ArticleVoteObject
  • BadRequestObject
  • BlacklistedClientObject
  • BlacklistedIPObject
  • PersonObject
  • RightsObject
  • TagObject

Interfaces

  • AlphaDAOProviderInterface
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: /**
  4:  *
  5:  * A HTTP request that resulted in a 404 response.  The class is only used when the
  6:  * security.client.temp.blacklist.filter.enabled setting is set to true to enable the filter.
  7:  *
  8:  * @package alpha::model
  9:  * @since 1.0
 10:  * @author John Collins <dev@alphaframework.org>
 11:  * @version $Id: BadRequestObject.inc 1670 2013-09-12 20:41:08Z alphadevx $
 12:  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
 13:  * @copyright Copyright (c) 2013, John Collins (founder of Alpha Framework).
 14:  * All rights reserved.
 15:  *
 16:  * <pre>
 17:  * Redistribution and use in source and binary forms, with or
 18:  * without modification, are permitted provided that the
 19:  * following conditions are met:
 20:  *
 21:  * * Redistributions of source code must retain the above
 22:  *   copyright notice, this list of conditions and the
 23:  *   following disclaimer.
 24:  * * Redistributions in binary form must reproduce the above
 25:  *   copyright notice, this list of conditions and the
 26:  *   following disclaimer in the documentation and/or other
 27:  *   materials provided with the distribution.
 28:  * * Neither the name of the Alpha Framework nor the names
 29:  *   of its contributors may be used to endorse or promote
 30:  *   products derived from this software without specific
 31:  *   prior written permission.
 32:  *
 33:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
 34:  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 35:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 36:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 37:  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 38:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 39:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 40:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 41:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 42:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 43:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 44:  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 45:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 46:  * </pre>
 47:  *
 48:  */
 49: class BadRequestObject extends AlphaDAO {
 50:     /**
 51:      * The HTTP user-agent client string
 52:      *
 53:      * @var String
 54:      * @since 1.0
 55:      */
 56:     protected $client;
 57: 
 58:     /**
 59:      * The IP of the client
 60:      *
 61:      * @var String
 62:      * @since 1.0
 63:      */
 64:     protected $IP;
 65: 
 66:     /**
 67:      * The non-existant resource that the client requested
 68:      *
 69:      * @var String
 70:      * @since 1.0
 71:      */
 72:     protected $requestedResource;
 73: 
 74:     /**
 75:      * An array of data display labels for the class properties
 76:      *
 77:      * @var array
 78:      * @since 1.0
 79:      */
 80:     protected $dataLabels = array('OID'=>'Bad request ID#','client'=>'Client string','IP'=>'IP','requestedResource'=>'Requested resource');
 81: 
 82:     /**
 83:      * The name of the database table for the class
 84:      *
 85:      * @var string
 86:      * @since 1.0
 87:      */
 88:     const TABLE_NAME = 'BadRequest';
 89: 
 90:     /**
 91:      * Trace logger
 92:      *
 93:      * @var Logger
 94:      * @since 1.0
 95:      */
 96:     private static $logger = null;
 97: 
 98:     /**
 99:      * Constructor for the class
100:      *
101:      * @since 1.0
102:      */
103:     public function __construct() {
104:         self::$logger = new Logger('BadRequestObject');
105:         self::$logger->debug('>>__construct()');
106: 
107:         // ensure to call the parent constructor
108:         parent::__construct();
109: 
110:         $this->client = new String();
111:         $this->IP = new String();
112:         $this->requestedResource = new String();
113: 
114:         self::$logger->debug('<<__construct');
115:     }
116: 
117:     /**
118:      * Gets the count of bad requests for the client with this IP and client string in the past
119:      * configurable period (security.client.temp.blacklist.filter.period)
120:      *
121:      * @return integer
122:      * @since 1.0
123:      * @throws AlphaException
124:      */
125:     public function getBadRequestCount() {
126: 
127:         global $config;
128: 
129:         // the datetime interval syntax between MySQL and SQLite3 is a little different
130:         if($config->get('db.provider.name') == 'AlphaDAOProviderMySQL')
131:             $sqlQuery = "SELECT COUNT(OID) AS request_count FROM ".$this->getTableName()." WHERE IP = '".$this->IP->getValue()."' AND client = '".$this->client->getValue()."' AND created_ts > NOW()-INTERVAL '".$config->get('security.client.temp.blacklist.filter.period')."' MINUTE";
132:         else
133:             $sqlQuery = "SELECT COUNT(OID) AS request_count FROM ".$this->getTableName()." WHERE IP = '".$this->IP->getValue()."' AND client = '".$this->client->getValue()."' AND created_ts > datetime('now', '-".$config->get('security.client.temp.blacklist.filter.period')." MINUTES')";
134: 
135:         $result = $this->query($sqlQuery);
136: 
137:         if(isset($result[0]))
138:             $row = $result[0];
139:         else
140:             throw new AlphaException('No result set returned when querying the bad request table');
141: 
142:         if(isset($row['request_count'])) {
143:             return $row['request_count'];
144:         }else{
145:             return 0;
146:         }
147:     }
148: }
149: 
150: ?>
Alpha Framework ${alpha.version.new} API Documentation API documentation generated by ApiGen 2.8.0