SQL-запрос, где поле НЕ содержит $x

Для последних версий Chrome (46+) текущий ответ больше не верен. unsafe-inline все еще не имеет эффекта (в тегах заголовка манифеста и в meta), но в документации вы можете использовать описанную здесь здесь , чтобы расслабить ограничение .

Использование хэшей для

Результат:

Дальнейшие исследования

Я также опробовал установку применимой директивы в теге meta вместо манифеста. Хотя CSP, указанный в сообщении консоли, включал содержимое тега, он не выполнил встроенный скрипт (в Chrome 53).

new background.html:



  
    
  
  
    
  

Результат:

Приложение: Генерация хэшей

Вот два метода генерации хэшей:

  1. Python ( передайте JS на stdin, проведите его где-то еще):
import hashlib
import base64
import sys

def hash(s):
    hash = hashlib.sha256(s.encode()).digest()
    encoded = base64.b64encode(hash)
    return encoded

contents = sys.stdin.read()
print(hash(contents))
  1. В JS, используя Стэнфордскую библиотеку криптоваторов в Javascript :
var sjcl = require('sjcl');
// Generate base64-encoded SHA256 for given string.
function hash(s) {
  var hashed = sjcl.hash.sha256.hash(s);
  return sjcl.codec.base64.fromBits(hashed);
}

Убедитесь, что при хэшировании встроенных скриптов включено все содержимое тега скрипта (включая все ведущие / завершающие пробелы). Если вы хотите включить это в свои сборки, вы можете использовать что-то вроде cheerio , чтобы получить соответствующие разделы. В общем случае для любого html вы можете:

var $ = cheerio.load(html);
var csp_hashes = $('script')
  .map((i, el) => hash($(el).text())
  .toArray()
  .map(h => `'sha256-${h}'`)
  .join(' ');
var content_security_policy = `script-src 'self' 'unsafe-eval' ${csp_hashes}; object-src 'self'`;

Это метод, используемый в hash-csp , плагин gulp для генерации хэшей.

115
задан Aeon 24 October 2008 в 23:24
поделиться

2 ответа

Какое поле - это? Оператор IN не может использоваться с единственным полем, но предназначен, чтобы использоваться в подзапросах или с предопределенными списками:

-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

при поиске строки пойдите для оператора LIKE (но это будет медленно):

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

, Если Вы ограничиваете его так, чтобы строка Вы искали, должен запуститься с данной строки, это может использовать индексы (если существует индекс на том поле) и быть довольно быстрым:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
249
ответ дан Vegard Larsen 5 November 2019 в 09:07
поделиться

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Удостоверяются, что Вы выходите из $x правильно заранее для предотвращения Внедрения SQL)

Редактирование: NOT IN делает что-то немного различное - Ваш вопрос не полностью ясен так выбор который использовать. LIKE 'xxx%' может использовать индекс. LIKE '%xxx' или LIKE '%xxx%' не может.

15
ответ дан Greg 5 November 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: