92 lines
2.4 KiB
PHP
92 lines
2.4 KiB
PHP
<?php
|
|
if (!defined('ABSPATH')) {
|
|
exit; //Exit if accessed directly
|
|
}
|
|
|
|
class AIOWPSecurity_Block_Htaccess extends AIOWPSecurity_Block_File {
|
|
|
|
/**
|
|
* Attempts to insert our apache directives into the htaccess file
|
|
*
|
|
* @return boolean|WP_Error true if success; false if failed
|
|
*/
|
|
public function insert_contents() {
|
|
|
|
$home_path = AIOWPSecurity_Utility_File::get_home_path();
|
|
|
|
// phpcs:ignore WordPress.WP.AlternativeFunctions -- wp_filesystem not recommended.
|
|
if (!is_writable($home_path)) {
|
|
return new WP_Error(
|
|
'file_wrong_permissions',
|
|
'The file has incorrect write permissions. Please double check its permissions and try again.',
|
|
$this->file_path
|
|
);
|
|
}
|
|
|
|
return (false !== @file_put_contents($this->file_path, $this->get_contents(), FILE_APPEND)); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- ignore this
|
|
}
|
|
|
|
/**
|
|
* Checks whether the file's contents are valid
|
|
*
|
|
* @param string $contents
|
|
* @return boolean
|
|
*/
|
|
protected function is_content_valid($contents) {
|
|
|
|
$regex = '/php_value auto_prepend_file \'(.*)\'/isU';
|
|
$bootstrap_path = AIOWPSecurity_Utility_Firewall::get_bootstrap_path();
|
|
|
|
$matches = array();
|
|
|
|
if (preg_match_all($regex, $contents, $matches)) {
|
|
$match = '';
|
|
foreach ($matches[1] as $match) {
|
|
|
|
if ($bootstrap_path !== $match) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* The regex pattern that demarcates our contents
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function get_regex_pattern() {
|
|
return '/\r?\n?# Begin AIOWPSEC Firewall(.*?)# End AIOWPSEC Firewall/is';
|
|
}
|
|
|
|
/**
|
|
* Our contents; the required apache directives for auto prepending a file
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_contents() {
|
|
$bootstrap_path = AIOWPSecurity_Utility_Firewall::get_bootstrap_path();
|
|
|
|
$directives = "\n# Begin AIOWPSEC Firewall\n";
|
|
$directives .= "\t<IfModule mod_php5.c>\n";
|
|
$directives .= "\t\tphp_value auto_prepend_file '{$bootstrap_path}'\n";
|
|
$directives .= "\t</IfModule>\n";
|
|
$directives .= "\t<IfModule mod_php7.c>\n";
|
|
$directives .= "\t\tphp_value auto_prepend_file '{$bootstrap_path}'\n";
|
|
$directives .= "\t</IfModule>\n";
|
|
$directives .= "\t<IfModule mod_php.c>\n";
|
|
$directives .= "\t\tphp_value auto_prepend_file '{$bootstrap_path}'\n";
|
|
$directives .= "\t</IfModule>\n";
|
|
$directives .= "# End AIOWPSEC Firewall";
|
|
|
|
return $directives;
|
|
}
|
|
|
|
|
|
} //end of class
|