mikeselander /
dummybot
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | namespace DummyPress; |
||
| 3 | |||
| 4 | /** |
||
| 5 | * Handling Ajax return and data |
||
| 6 | * |
||
| 7 | * @package WordPress |
||
| 8 | * @subpackage Evans |
||
| 9 | * @author Mike Selander |
||
| 10 | */ |
||
| 11 | class Ajax { |
||
| 12 | |||
| 13 | /** |
||
| 14 | * reporting |
||
| 15 | * Reporting class instance. |
||
| 16 | * |
||
| 17 | * @var object |
||
| 18 | * @access private |
||
| 19 | */ |
||
| 20 | private $reporting; |
||
| 21 | |||
| 22 | /** |
||
| 23 | * plugin |
||
| 24 | * Plugin class instance. |
||
| 25 | * |
||
| 26 | * @var object |
||
| 27 | */ |
||
| 28 | private $plugin; |
||
| 29 | |||
| 30 | /** |
||
| 31 | * action |
||
| 32 | * Name of the action we want to use in our AJAX calls |
||
| 33 | * |
||
| 34 | * @var string |
||
| 35 | */ |
||
| 36 | private $action; |
||
| 37 | |||
| 38 | |||
| 39 | /** |
||
| 40 | * Instantiate any WP hooks that need to be fired. |
||
| 41 | */ |
||
| 42 | public function hooks() { |
||
| 43 | |||
| 44 | $this->reporting = new Reporting; |
||
| 45 | $this->action = 'handle_test_data'; |
||
| 46 | |||
| 47 | add_action( "wp_ajax_{$this->action}", array( $this, 'handle_ajax' ) ); |
||
| 48 | add_filter( 'option_active_plugins', array( $this, 'ajax_exclude_plugins' ) ); |
||
| 49 | |||
| 50 | } |
||
| 51 | |||
| 52 | |||
| 53 | /** |
||
| 54 | * Set a reference to the main plugin instance. |
||
| 55 | * |
||
| 56 | * @param $plugin Plugin instance. |
||
| 57 | * @return Ajax instance |
||
| 58 | */ |
||
| 59 | public function set_plugin( $plugin ) { |
||
| 60 | |||
| 61 | $this->plugin = $plugin; |
||
| 62 | return $this; |
||
| 63 | |||
| 64 | } |
||
| 65 | |||
| 66 | |||
| 67 | /** |
||
| 68 | * Turn outside plugins off during our AJAX calls to speed everything up. |
||
| 69 | * |
||
| 70 | * Having a lot of plugins running slows down an AJAX request, this function |
||
| 71 | * turns all other plugins off temporarliy while the AJAX requests is running. |
||
| 72 | * |
||
| 73 | * https://deliciousbrains.com/excluding-wordpress-plugins-loading-specific-ajax-requests/ |
||
| 74 | * |
||
| 75 | * @param array $plugins All active plugins. |
||
| 76 | * @return array Whitelisted plugins. |
||
| 77 | */ |
||
| 78 | public function ajax_exclude_plugins( $plugins ) { |
||
|
0 ignored issues
–
show
|
|||
| 79 | |||
| 80 | if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX || ! isset( $_POST['action'] ) || false === strpos( $_POST['action'], $this->action ) ) { |
||
| 81 | return $plugins; |
||
| 82 | } |
||
| 83 | |||
| 84 | foreach( $plugins as $key => $plugin ) { |
||
| 85 | |||
| 86 | if ( false !== strpos( $plugin, $this->plugin->definitions->slug ) ) { |
||
| 87 | continue; |
||
| 88 | } |
||
| 89 | |||
| 90 | unset( $plugins[$key] ); |
||
| 91 | } |
||
| 92 | |||
| 93 | return $plugins; |
||
| 94 | |||
| 95 | } |
||
| 96 | |||
| 97 | |||
| 98 | /** |
||
| 99 | * Ajax callback function for triggering the creation & deletion of test data. |
||
| 100 | * |
||
| 101 | * @see wp_ajax filter, $this->add_menu_item, $this->creation_routing |
||
| 102 | */ |
||
| 103 | public function handle_ajax() { |
||
|
0 ignored issues
–
show
handle_ajax uses the super-global variable $_REQUEST which is generally not recommended.
Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable: // Bad
class Router
{
public function generate($path)
{
return $_SERVER['HOST'].$path;
}
}
// Better
class Router
{
private $host;
public function __construct($host)
{
$this->host = $host;
}
public function generate($path)
{
return $this->host.$path;
}
}
class Controller
{
public function myAction(Request $request)
{
// Instead of
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
// Better (assuming you use the Symfony2 request)
$page = $request->query->get('page', 1);
}
}
Loading history...
|
|||
| 104 | |||
| 105 | $action = $_REQUEST['todo']; |
||
| 106 | $nonce = $_REQUEST['nonce']; |
||
| 107 | |||
| 108 | // Verify that we have a proper logged in user and it's the right person |
||
| 109 | if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, 'handle-test-data' ) ) { |
||
| 110 | return; |
||
| 111 | } |
||
| 112 | |||
| 113 | if ( $action == 'delete' ) { |
||
| 114 | |||
| 115 | $this->deletion_routing( $_REQUEST ); |
||
| 116 | |||
| 117 | } elseif ( $action == 'create' ) { |
||
| 118 | |||
| 119 | $this->creation_routing( $_REQUEST ); |
||
| 120 | |||
| 121 | } |
||
| 122 | |||
| 123 | die(); |
||
|
0 ignored issues
–
show
The method
handle_ajax() contains an exit expression.
An exit expression should only be used in rare cases. For example, if you write a short command line script. In most cases however, using an Loading history...
|
|||
| 124 | |||
| 125 | } |
||
| 126 | |||
| 127 | |||
| 128 | /** |
||
| 129 | * Choose which type of creation needs to be accomplished and route through |
||
| 130 | * the correct class. |
||
| 131 | */ |
||
| 132 | private function creation_routing( $data ) { |
||
| 133 | |||
| 134 | $type = 'DummyPress\Types\\' . ucwords( $data['type'] ); |
||
| 135 | $object = new $type(); |
||
| 136 | $return = $object->create_objects( $data['slug'], $data['connection'], true, 1 ); |
||
| 137 | |||
| 138 | $clean = $this->reporting->create_report( $return ); |
||
| 139 | |||
| 140 | echo $clean; |
||
| 141 | |||
| 142 | } |
||
| 143 | |||
| 144 | |||
| 145 | /** |
||
| 146 | * Choose which type of deletion needs to be accomplished and route through |
||
| 147 | * the correct method of Delete. |
||
| 148 | */ |
||
| 149 | private function deletion_routing( $data ) { |
||
| 150 | |||
| 151 | $delete_content = new Delete; |
||
| 152 | |||
| 153 | if ( $data['type'] == 'all' ) { |
||
| 154 | |||
| 155 | $return = $delete_content->delete_all_test_data(); |
||
| 156 | |||
| 157 | } else { |
||
| 158 | |||
| 159 | $return = $delete_content->delete_objects( $data ); |
||
| 160 | |||
| 161 | } |
||
| 162 | |||
| 163 | $clean = $this->reporting->create_report( $return ); |
||
| 164 | |||
| 165 | echo $clean; |
||
| 166 | |||
| 167 | } |
||
| 168 | |||
| 169 | |||
| 170 | } |
||
| 171 |
Instead of super-globals, we recommend to explicitly inject the dependencies of your class. This makes your code less dependent on global state and it becomes generally more testable: