Я пытаюсь написать оператор if, который в основном проверяет, находится ли реферер пользователей в списке разрешенных рефереров, и если нет, не удается.
У меня есть две переменные, управляющие этими $this->allowAllReferer
и $this->allowEmptyReferer
,которые в соответствии с их именем решают, следует ли разрешить доступ каждому рефереру и, соответственно, пустые рефереры.А также $this->allowedReferers
, который является массивом разрешенных рефереров.
У меня есть эта функция, ниже которой я уверен, что она не работает должным образом, но я смотрел и настраивал ее в течение получаса, и я дошел до того, что не могу сказать, если этоработает или нет.
//If the referee is empty and allow empty referrer is false
//or
//If it is not in the allowed list and allow all referer is false
if(!(empty($_SERVER['HTTP_REFERER']) && $this->allowEmptyReferer)
&&
!(!$this->allowAllReferer && in_array(
strtolower(empty($_SERVER['HTTP_REFERER']) ? null : $_SERVER['HTTP_REFERER']), //Silly php access null variable
$this->allowedReferers)
)) {
throw new sfException("Internal server error. Please contact system administrator. File download disabled.");
}
Знаете ли вы правильный или лучший способ сделать это / можете ли вы подтвердить вышеуказанные работы?
Случаи, надеюсь, это проясняет ситуацию
empty_referrer | allowEmpty | in_array | allReferer | result
----------------------------------------------------------------
true | true | false | false | false - no error - empty allowed
false | true | false | false | true - error - not in array
false | true | false | true | false - no error - not in array but allowed
false | false | false | false | true - error - empty and now allowed